Android可以“杀死”活动而不会杀死应用程序吗?

时间:2013-08-05 08:44:47

标签: android-activity activity-lifecycle android

众所周知,此类场景中Android的默认流程是在释放对onSaveInstanceState对象的引用之前调用活动的相应onStoponDestroyActivity方法

然而,似乎我有一个案例,当我的应用程序在后台时,活动在没有调用这些方法的情况下被杀死,但我的应用程序本身并没有被破坏。

但是我无法强制重现这一点。每当我在前台使用需要大量资源的应用程序时,整个过程都会被杀死,而不仅仅是活动。

哪种让我感到惊讶,因为我认为低资源上的'app kill'基本上只是旧的信号方式,Android系统是否真的在不调用这些方法的情况下立即“杀死”(释放)一项活动?还是我在追逐鬼魂?

3 个答案:

答案 0 :(得分:2)

Android app out of memory issues - tried everything and still at a loss

  

这不是事情的运作方式。影响活动生命周期的唯一内存管理是所有进程的全局内存,因为Android决定它在内存上运行不足,因此需要杀死后台进程以获得一些回复

答案 1 :(得分:1)

即使您的应用程序处于前台状态,Android操作系统也可能仅杀死您的某些活动。例如,如果您有两个活动AB,并且当A调用startActivity / startActivityForResult开始活动B时,Android可能会决定破坏活动{{1 }}的实例,因为它占用了过多的内存空间。

您可以通过选中developer options menu中的A来强制杀死不在前台运行的活动。

答案 2 :(得分:0)

  

Android系统是否真的会杀死' (发布)一项活动   什么时候不调用这些方法?

是的。以下是文档对onStop()所说的内容:

  

请注意,在内存不足的情况下,可能永远不会调用此方法   系统没有足够的内存来保持您的活动   调用onPause()方法后运行的进程。

关于onDestroy()

  

在某些情况下,系统会简单地杀死活动的托管   进程中没有调用此方法(或任何其他方法),所以它   不应该被用来做那些打算留下来的东西   过程消失后。

     

不要指望这种方法被称为地方   保存数据!例如,如果活动正在编辑内容中的数据   提供者,这些编辑应该在onPause()或   onSaveInstanceState(Bundle),不在这里。

"但是我无法强制重现这一点。" - 您可以通过在后台发送应用程序然后使用DDMS手动终止进程来重现这种情况