onStop()
将(例如)在您离开活动以进行其他活动时被调用(编辑:几乎。请参阅关于对话框主题活动的 commonswares 评论)。例如,如果您startActivity()
在活动 A 中使用来启动活动 B。当您在活动 B 中按回时,您将返回到活动 A 并被onStart
调用。
这不同于一些onPause
可能被调用而不onStop
被调用的原因。例如,如果屏幕超时或您按下待机按钮onPause
将被调用,但可能不会onStop
(取决于可用内存等),所以这是一个“较轻的暂停”。即使在这种情况下,onStop 也可能最终被调用,但不会立即调用。
好的,但是有什么用
通常没有特定用途,但可能有。由于即使在您启动其他活动之后,您的活动仍将其内存状态保留在堆栈上,因此该堆栈将随着开始的活动数量(堆栈的高度)而增加。这可能会导致某些应用程序使用大量内存。一段时间后,框架将启动并杀死堆栈上的一些活动,但这相当直截了当,可能意味着返回时要保留很多状态。
因此,使用 for 的示例onStart/onStop
是,如果您想在将活动留给另一个活动时释放某些状态,并在返回时重新创建它。我已经用它来将 listadapter 设置为 null、空图像缓存和类似的(在非常特定的应用程序中)。如果要释放 listadapter 中可见视图使用的内存,可以在 onstart 中重新创建它并让 gc 拾取视图。这将增加活动的其余内存状态将继续存在的可能性。
有些资源可以被认为足够好,可以在活动实例处于活动状态时进行保存,而有些资源仅在它位于堆栈的前面时才可以保存。由您决定在您的应用程序中什么是最好的,而创建/启动/恢复的粒度为您提供了这一点。