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