2011-08-13 12 views
10

मैं एक एंड्रॉइड मोबाइल ऐप बना रहा हूं। मेरे पास AsyncTask में मेरी गतिविधि के लिए एक कमजोरता है यह सुनिश्चित करने के लिए कि यह कचरा एकत्र किया जा सकता है।कमजोरेंस प्राप्त करें() विधि यह कितनी सुरक्षित है? (एंड्रॉइड, asynctask)

Acitivty activity = mWeakRef.get(); 

तब मैं गतिविधि वस्तु का उपयोग करते हैं onPostExecute() कहा जाता हो जाता है, मैं उपयोगकर्ता आदि आदि

मेरा प्रश्न है करने के लिए संवाद प्रदर्शित करने की, जैसा कि मैंने जो संवाद निर्धारित करने के लिए कोशिश कर रहा हूँ दिखाएं और क्या करना है, क्या मेरी गतिविधि वस्तु शून्य हो सकती है? अगर जीसी निष्पादन की मेरी लाइन के बीच चलता है तो क्या यह कभी भी शून्य हो सकता है? क्या मैं उस ऑब्जेक्ट को पहले get() से उपयोग करना सुरक्षित रखता हूं या मुझे get() फिर से करना होगा और यह जांचने से पहले कि मूल्य ठीक है या नहीं।

धन्यवाद!

उत्तर

9

यह सुरक्षित है!
जैसे ही आप एक चर के लिए get() के परिणाम को आवंटित करते हैं, आपके पास एक मजबूत संदर्भ फिर से होता है जो इस ऑब्जेक्ट के लिए gargbage संग्रह को अवरुद्ध करता है जब तक कि नया संदर्भ मौजूद न हो।
बेशक, इस असाइनमेंट के बाद आपको यह जांचने की आवश्यकता है कि गतिविधि शून्य है या नहीं।

-1

मुझे लगता है कि यह सुरक्षित नहीं है। मुझे हैंडलर के अंदर activity.msgWebView.setVisibility(View.GONE); पर एक एनपीई मिलता है।

`` `जावा

निजी स्थिर वर्ग HttpStatusHandler हैंडलर {

private WeakReference<MessageWebViewActivity> activityWeakReference; 

    public HttpStatusHandler(WeakReference<MessageWebViewActivity> activityWeakReference) { 
     this.activityWeakReference = activityWeakReference; 
    } 

    @Override 
    public void handleMessage(Message msg) { 
     MessageWebViewActivity activity = activityWeakReference.get(); 
     if (activity != null) { 
      if (msg.what == MSG_URL_OK) { 
       activity.loadUrl(activity.url); 
      } else if (msg.what == MSG_URL_ERROR) { 
       activity.msgWebView.setVisibility(View.GONE); 
       activity.clPageError.setVisibility(View.VISIBLE); 
       activity.progressbarLayout.setVisibility(View.GONE); 
      } 

     } 
    } 
} 

` ``

फैली
संबंधित मुद्दे