我创建了一个类来缓存活动,例如:
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。
那么,为什么它起作用?
答案 0 :(得分:1)
应在垃圾回收时清除弱引用,但完成活动可能不会触发GC。