我面临着类似的问题。我在我的应用程序中使用了一些静态类成员,包括单例。当我使用 finish() 离开主要活动并重新启动它时,所有静态成员仍然存在。调用 Process.killProcess(Process.myPid()); 似乎不是一个好的解决方案;而且我也不想在离开应用程序时取消设置所有静态成员,因为在扩展应用程序时这很容易出错。那么如何正确地完全退出一个android应用程序呢?
3 回答
您不理会静态数据成员。他们没有伤害任何人。Android 将在需要内存时终止您的进程。
正如@CommonsWare 所说,您可以留下静态成员,Android 操作系统会处理它,如果您仍然需要,您可以覆盖 onDestroy() 并取消所有静态变量。那么当您的应用下次启动时它将为空。
关于这个话题的一些重要观察(我认为):
这是Android编程的一个重要方面。在此处查看活动生命周期文档http://developer.android.com/reference/android/app/Activity.html并不能很好地解释这种行为 - 我认为。
有一个底层的类加载器概念,它加载类,包括静态变量的所有初始设置。一旦活动停止甚至被破坏,它可能仍会保留在内存中!
当您现在再次启动应用程序时,将采用该类的最后一个状态 - 如果它仍然可以在内存中找到。当类加载器加载和初始化你的类时,类不会像第一次那样被初始化。
这也是为什么在开发/调试期间重新启动应用程序在启动之前真正“清理”整个类,而之后在设备上安装和启动/退出应用程序时,您可能不会像调试期间那样强制“真正”启动。
使变量无效只会增加 GC 的概率。您不得强制卸载 afaik。因此,从这个意义上说,没有办法“完全退出应用程序”。
必须围绕这个系统行为设计应用程序——尤其是更复杂的应用程序。
到目前为止,这是我的理解 - 不幸的是,我还没有找到任何关于此的完整文档。
如果我错了 - 请原谅和纠正!