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