[英]Weakreference get() method how safe is it? (Android, asynctask)
我正在制作 Android 移動應用程序。 我在 AsyncTask 中有一個對我的 Activity 的 WeakReference,以確保它可以被垃圾收集。
當onPostExecute()
被調用時,我會
Acitivty activity = mWeakRef.get();
然后我使用活動 object 向用戶顯示對話框等。
我的問題是,當我試圖確定要顯示哪個對話框以及要做什么時,我的活動 object 會變成 null 嗎? 如果 GC 在我的執行行之間運行,它會變成 null 嗎? 我是否可以安全地從第一個get()
繼續使用 object,或者我必須重做get()
並在我使用它之前檢查值是否為 null。
謝謝!
它是安全的!
只要將 get() 的結果分配給變量,您就會再次擁有一個強引用,只要新引用存在,它就會阻止此 object 的垃圾收集。
當然,在這個分配之后,您需要檢查活動是否為 null。
我認為這不安全。 我在activity.msgWebView.setVisibility(View.GONE);
處理程序內部。
```java
私有 static class 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);
}
}
}
}
```
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.