2011-11-08 15 views
6

AsyncTask एस और स्क्रीन रोटेशन से निपटने के दौरान भी मैं "सही" डिज़ाइन पैटर्न ढूंढने की कोशिश कर रहा हूं। मैंने this commonsware blog post पढ़ा है जो this code से लिंक है, लेकिन onRetainNonConfigurationInstance विधि अब बहिष्कृत है। प्रलेखन में जादू वाक्य में कहा गया है कि "अगली गतिविधि में स्विच के दौरान कोई संदेश हैंडलिंग की गारंटी सक्रिय वस्तुओं के साथ उपयोग को सरल बनाती है ..." जो इस विधि के बारे में वास्तव में महत्वपूर्ण हिस्सा है। मुझे एक ही लक्ष्य को पूरा करने में सक्षम होने के setRetainInstance() का उपयोग करने का सुझाव नहीं दिख रहा है।स्क्रीन रोटेशन के साथ AsyncTask - onRetainNonConfigurationInstance

मैंने पोस्ट such as this one पोस्ट किया है जिनके नंबर एक उत्तर वास्तव में एक खराब हैक से कम नहीं है जिसमें केवल 9 0% उपयोग मामलों को शामिल किया गया है (यानी यदि आपका कार्य चल रहा है और फिर एक फोन कॉल आता है तो क्या होगा, वह समाधान होगा काम नहीं)।

यह AsyncTask उदाहरण के लिए कोड here समीक्षा करने के लिए सुझाव दिया गया था लेकिन जब तक मैं घने जा रहा हूँ, मैं उन्हें आवेदन में कहीं भी इस्तेमाल किया जा रहा है (जब गूगल कोड पर search feature उपयोग करते हुए) नहीं दिख रहा है

यह सवाल है स्पष्ट रूप से कई बार पूछा गया है, लेकिन मैंने एक अद्यतित, उचित asnwer नहीं देखा है। यदि कोई मौजूद है, तो कृपया उत्तर दें और डुप्लिकेट के रूप में बंद करें, लेकिन कम से कम जवाब दें! :)

This is another link जो समान, बहिष्कृत विधि की समीक्षा करता है।

+0

देखें [मेरा जवाब यहां] (http://stackoverflow.com/a/12303649/265521)। ['AsyncTaskLoader'] (http://developer.android.com/reference/android/content/AsyncTaskLoader.html) का भी सुझाव दिया गया है। – Timmmm

उत्तर

1

यह केवल हनीकॉम और ऊपर पर बहिष्कृत है, और यह उन पर भी ठीक काम करेगा। लोडर का उपयोग करने का 'नया' तरीका है (आप प्री-एचसी संस्करणों में उनको प्राप्त करने के लिए संगतता लाइब्रेरी का उपयोग कर सकते हैं) या टुकड़े बनाए रखा है। यदि आप setRetainInstance() पर कॉल करते हैं तो नई बनाई गई गतिविधि के लिए उत्तीर्ण उदाहरण (वे वास्तव में संगतता लाइब्रेरी के FragmentActivity में onRetainNonConfigurationInstance का उपयोग करते हैं), इसलिए यह प्रभावी रूप से आपके जैसा ही है।

+0

लेकिन यहां तक ​​कि मैं ऑब्जेक्ट x = setRetainInstance (true) का उपयोग करता हूं, वहां समस्या है जिसका उपयोग मैं नहीं कर सकता। मुझे अपना खुद का सेटरेटइन इंस्टेंस() बनाना है, क्यों? –

+0

@RajuGurig क्या? क्या आपने इस विधि के हस्ताक्षर को देखा है? –

1

बहिष्कृत विधि का उपयोग करने में स्वाभाविक रूप से गलत कुछ भी नहीं है। यदि आपका AsyncTask यह महत्वपूर्ण है कि आप इसे रद्द नहीं कर सकते हैं और यदि आपका अभिविन्यास बदलता है तो इसे फिर से शुरू करें, आपको सेवा का उपयोग करने पर विचार करना चाहिए।

संबंधित मुद्दे