onDestroy()究竟是什么破坏了?

wwy*_*wyt 29 android ondestroy

我一直被这个"特性"所困扰:当我使用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++;
}
Run Code Online (Sandbox Code Playgroud)

}

上面的代码在mValue中显示剩余值,并在会话结束时递增,这样我就可以确定调用了onDestroy().

我在这个论坛上找到了一个有用的答案,我在上面的代码中理解mValue是一个类成员,而不是实例成员.但是,在这个特殊情况下,我只有一个HelloAndroid活动,所以当他去世时,一切都被清理干净,下次我回来时,一切都重新开始了,这不是真的吗?(或者,在onDestroy()之后,系统中还有其他一些神秘的东西仍然坚持它,这样它就不会死了吗?)

(上面只是一个变量,如果它是一堆对象引用怎么办?每个部分都是一个单独的可重新收集的内存.GC是否有机会收集其中一些而不是全部或者没有?这真的让我烦恼. )

And*_*ite 35

操作系统决定什么时候"消失".这onDestroy是为了让你的应用程序最终有机会在活动被销毁之前进行清理,但这并不意味着活动实际上将是GCed.这是一篇很好的文章,我建议人们阅读与创建退出按钮有关的文章.虽然它不完全是您所询问的,但这些概念将帮助您了解正在发生的事情.


Jem*_*ems 9

你不只是拥有活动.您还可以在Dalvik VM中运行该应用程序及其进程.Android通常会让应用程序在后台运行,直到它需要回收它用于其他应用程序的内存.只要进程正在运行,您的静态成员就应该保留在内存中.如果您尝试运行一些内存密集型应用程序或使用某个任务管理器强制关闭正在运行的应用程序,您可能会看到静态值重置.