簡體   English   中英

弱引用 get() 方法有多安全? (安卓,異步任務)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM