代码之家  ›  专栏  ›  技术社区  ›  Darshan

对weakreference调用clear()不起作用

  •  0
  • Darshan  · 技术社区  · 7 年前

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

    但当我在Logcat登记时 mContext != null ,它总是返回 true .

    1 回复  |  直到 7 年前
        1
  •  0
  •   Mayur Gajra    7 年前

    我看了一些文章和一些其他堆满答案,得出的结论是你不会得到 mContext == null 除非在异步任务完成工作之前分配空值或活动正在完成或已被销毁。

    所以当你使用 mContext.clear(); 你不能 mContext 空,您只需清除此引用对象并调用它不会导致该对象排队等待GC。 mContext.get() == null 在清除以下引用后为true。

    @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

    推荐文章