在Activity.onDestroy()方法之后,为什么我仍然可以获取此活动的实例?

时间:2019-04-28 07:05:09

标签: android

我创建了一个类来缓存活动,例如:

public class ActivityList {

    public static List<WeakReference<Activity>> list = new LinkedList<>();

    public static void put(Activity activity) {
        list.add(new WeakReference<>(activity));
    }

}

,以及onDestroy方法:

@Override
protected void onDestroy() {
    super.onDestroy();
    Log..e("test", "call onDestroy");
}

第二,我在System的开发人员选项中启用“不要保留活动”,以确保我离开后活动将被杀死

然后,我启动一个Activity并将一个实例放到ActivityList类中

ActivityList.put(this);

当我将此活动留给另一个活动时,LogCat将显示第一个称为onDestroy()的活动。然后在第二个活动中,我得到第一个活动的实例,例如:

WeakReference<Activity> weakReference = ActivityList.list.get(0);
Activity activity = weakReference.get();
activity.runOnUiThread(() -> Toast.makeText(this, "HHHH", Toast.LENGTH_SHORT).show());

然后代码运行良好?! 在我看来,第一个活动称为onDestroy(),然后我将无法再使用它,因此不应显示Toast。并且在onDestroy()之后,没有任何强引用引用该活动,它应该是系统的GC。

那么,为什么它起作用?

1 个答案:

答案 0 :(得分:1)

应在垃圾回收时清除弱引用,但完成活动可能不会触发GC。