11

我们知道,Android 中这种场景的默认流程是在释放对对象的引用之前调用 Activity 各自onSaveInstanceStateonStop,方法。onDestroyActivity

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

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

哪一种让我想知道,因为我认为在低资源上的“应用程序杀戮”本质上只是旧的信号方式,Android系统是否真的在不调用这些方法的情况下立即“杀死”(释放)一个活动?还是我在追鬼?

4

3 回答 3

3

Android 应用程序内存不足问题 - 尝试了所有方法,但仍然一头雾水

这不是事情的运作方式。影响活动生命周期的唯一内存管理是所有进程的全局内存,因为 Android 认为它的内存不足,因此需要终止后台进程以取回一些内存

现在官方文档中的解释更清楚了

系统从不直接杀死活动以释放内存。相反,它会杀死活动运行的进程,不仅会破坏活动,还会破坏进程中运行的所有其他内容。要了解如何在系统启动的进程死亡发生时保留和恢复活动的 UI 状态,请参阅保存和恢复活动状态。

于 2018-01-07T16:48:20.203 回答
2

即使您的应用程序在前台,Android 操作系统也可能只杀死您的一些活动。例如,如果您有两个ActivityAB,并且当A调用startActivity / startActivityForResultstart Activity时B,Android 可能会决定销毁 ActivityA的实例,因为它占用了太多的内存空间。

Don't keep activities您可以通过签入来强制杀死不在前台运行的活动developer options menu

于 2020-01-30T15:51:09.533 回答
0

Android 系统是否真的在不调用这些方法的情况下立即“杀死”(释放)一个活动?

是的,它确实。以下是文档关于以下内容的说明onStop()

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

关于onDestroy()

在某些情况下,系统会简单地终止 Activity 的宿主进程,而不会在其中调用此方法(或任何其他方法),因此不应使用它来执行打算在进程消失后保留的事情。

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

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

于 2013-08-05T09:02:17.533 回答