我一直被这个“特征”所困扰:当我使用Back按钮离开我的应用程序时,我可以告诉onDestroy()被调用,但是下次我运行我的应用程序时,Activity类的所有静态成员仍保留其价值观。请参阅以下代码:
public class HelloAndroid extends Activity {
private static int mValue; // a static member here
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText((mValue != 0) ?
("Left-over value = " + mValue) : "This is a new instance");
setContentView(tv);
}
public void onDestroy() {
super.onDestroy();
mValue++;
}
}
上面的代码显示了mValue中的剩余值,并且当会话结束时它会递增,这样我就可以确定调用了onDestroy()。
我在这个论坛上找到了useful answer,我在上面的代码中理解mValue是一个类成员,而不是实例成员。但是,在这个特殊情况下,我只有一个HelloAndroid活动,所以当他去世时,一切都被清理干净,下次我回来时,一切都重新开始了,这不是真的吗? (或者,在onDestroy()之后,系统中还有其他一些神秘的东西仍然存在,以便它不会死掉吗?)
(上面只是一个变量,如果它是一堆对象引用怎么办?每个部分都是一个单独的可重新收集的内存.GC是否有机会收集其中的一些而不是全部或者没有?这真的我错了。)
答案 0 :(得分:35)
操作系统决定什么时候“消失”。 onDestroy
是让你的应用有最终的机会在活动被销毁之前清理的东西,但这并不意味着活动实际上将被GC。这是good article我建议人们阅读与创建退出按钮相关的内容。虽然它并不完全是您所询问的,但这些概念将帮助您了解正在发生的事情。
答案 1 :(得分:9)
你不仅拥有活动。您还可以在Dalvik VM中运行该应用程序及其进程。 Android通常会让应用程序在后台运行,直到它需要回收它用于其他应用程序的内存。只要进程正在运行,您的静态成员就应该保留在内存中。如果您尝试运行一些内存密集型应用程序或使用某个任务管理器强制关闭正在运行的应用程序,您可能会看到静态值重置。