在WeakReference上调用clear()无法正常工作

时间:2019-01-13 06:26:41

标签: android android-asynctask

我在Activity中使用嵌套的私有静态AsyncTask类来完成一些工作,并且将Activity上下文传递给AsyncTask并将其初始化为WeakReference。
完成工作后,我在onPostExecute()中打电话
if(mContext.get() != null) mContext.clear();

但是当我检查logcat是否为mContext != null时,它总是返回true

1 个答案:

答案 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

相关问题