2012-03-21 17 views
23

Apress Pro Android 4 में लेखक ने कहा है से बचने के लिए है कि:एंड्रॉयड Asyntask: संदर्भ के लिए उपयोग कमजोर संदर्भ डिवाइस घुमाएँ स्क्रीन

[...] वर्तमान में गतिविधि चलाने का संदर्भ अब मान्य नहीं होगा जब डिवाइस घुमाया गया है। [...] एक दृष्टिकोण एक कठिन संदर्भ की बजाय गतिविधि के कमजोर संदर्भ का उपयोग करना है [...]

लेकिन लेखक बस इसका सुझाव देते हैं, और यह नहीं बताते कि यह कैसे किया जाता है। कृपया मुझे यह उदाहरण देने से पहले यह किसने किया है।

उत्तर

56

कहीं आपके AsyncTask में आप अपनी गतिविधि में उत्तीर्ण करना चाहते हैं। फिर आप उस संदर्भ को कमजोर संदर्भ में सहेज लेंगे। फिर आप onPostExecute में फिर से उपयोग कर सकते हैं और इसका उपयोग कर सकते हैं।

कक्षा सदस्य:

WeakReference<Activity> weakActivity; 

AsyncTask में कहीं न कहीं, शायद या तो निर्माता या onPreExecute:

weakActivity = new WeakReference<Activity>(activity); 

onPostExecute में:

Activity activity = weakActivity.get(); 
if (activity != null) { 
    // do your stuff with activity here 
} 
+0

अच्छा, यह वास्तव में मदद की धन्यवाद –

+1

'activity' अभी भी अमान्य संदर्भ होगा I एफ जीसी समय पर लात नहीं था। अगर मैं गलत हूं कृपया मुझे सही। – q126y

0

यदि आप पिछली गतिविधि को पुनर्स्थापित करना चाहते हैं, तो SaveInstanceState पर क्यों न जाएं और इसे बाद में पुनर्स्थापित करें।

चेक अधिक जानकारी के

Saving application state

1

यहाँ के लिए इस लिंक WeakReference का एक उदाहरण एक संदर्भ स्टोर करने के लिए है,

WeakReference<Context> cReference = new WeakReference<Context>(getApplicationContext()); 

अब हम गतिविधि/संदर्भ से संबंधित कार्य करने के लिए इस कमजोर संदर्भ का उपयोग कर सकते हैं।