我在Activity中使用嵌套的私有静态AsyncTask类来完成一些工作,并且将Activity上下文传递给AsyncTask并将其初始化为WeakReference。
完成工作后,我在onPostExecute()
中打电话
if(mContext.get() != null) mContext.clear();
但是当我检查logcat是否为mContext != null
时,它总是返回true
。
答案 0 :(得分:0)
我研究了一些文章和其他一些stackoverflow的答案,我得出的结论是,除非并且除非您分配null或活动完成或在异步任务可以完成之前被破坏,否则您不会得到mContext == null
工作。
因此,当您使用mContext.clear();
时,请不要使mContext
为空,您只需清除该引用对象,并调用该引用对象就不会使该对象排队进入GC。因此,您只会得到在清除了以下引用后,mContext.get() == null
为真。
@Override
protected void onPostExecute(Object object) {
super.onPostExecute(object);
if (mContext.get() != null) {
mContext.clear();
}
Log.d("MG-Context", mContext.get() == null ? "Yes" : "No");
}
请在此处查看此文章以获取更多信息: https://medium.com/google-developer-experts/finally-understanding-how-references-work-in-android-and-java-26a0d9c92f83