众所周知,此类场景中Android的默认流程是在释放对onSaveInstanceState
对象的引用之前调用活动的相应onStop
,onDestroy
,Activity
方法
然而,似乎我有一个案例,当我的应用程序在后台时,活动在没有调用这些方法的情况下被杀死,但我的应用程序本身并没有被破坏。
但是我无法强制重现这一点。每当我在前台使用需要大量资源的应用程序时,整个过程都会被杀死,而不仅仅是活动。
哪种让我感到惊讶,因为我认为低资源上的'app kill'基本上只是旧的信号方式,Android系统是否真的在不调用这些方法的情况下立即“杀死”(释放)一项活动?还是我在追逐鬼魂?
答案 0 :(得分:2)
Android app out of memory issues - tried everything and still at a loss
这不是事情的运作方式。影响活动生命周期的唯一内存管理是所有进程的全局内存,因为Android决定它在内存上运行不足,因此需要杀死后台进程以获得一些回复
答案 1 :(得分:1)
即使您的应用程序处于前台状态,Android操作系统也可能仅杀死您的某些活动。例如,如果您有两个活动A
和B
,并且当A
调用startActivity / startActivityForResult
开始活动B
时,Android可能会决定破坏活动{{1 }}的实例,因为它占用了过多的内存空间。
您可以通过选中developer options menu
中的A
来强制杀死不在前台运行的活动。
答案 2 :(得分:0)
Android系统是否真的会杀死' (发布)一项活动 什么时候不调用这些方法?
是的。以下是文档对onStop()
所说的内容:
请注意,在内存不足的情况下,可能永远不会调用此方法 系统没有足够的内存来保持您的活动 调用onPause()方法后运行的进程。
关于onDestroy()
:
在某些情况下,系统会简单地杀死活动的托管 进程中没有调用此方法(或任何其他方法),所以它 不应该被用来做那些打算留下来的东西 过程消失后。
不要指望这种方法被称为地方 保存数据!例如,如果活动正在编辑内容中的数据 提供者,这些编辑应该在onPause()或 onSaveInstanceState(Bundle),不在这里。
"但是我无法强制重现这一点。" - 您可以通过在后台发送应用程序然后使用DDMS手动终止进程来重现这种情况