繁体   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