我读过几篇文章,描述了活动可见时调用onStart()
和onResume()
:当活动准备好与用户交互时调用onStart()
。好的。
我一直只是把代码添加到onResume()
和onPause()
中,而从不为onResume()
和onStart()
而烦恼。
有人能举一些具体的例子来说明你可能会在onStop()
和onStart()
中做些什么吗?同样适用于onResume()
和onStop()
,如何使用onPause()
?我一定错过了一些基本的东西。
最佳答案
当您离开活动进行其他活动(编辑:几乎)时,onStop()
将被调用(例如)。参见Commonware评论关于对话主题的活动)。
例如,如果您在活动A中使用startActivity()
启动活动B。当您在活动B中按下back时,您将返回到活动A,并将调用onStart
。
这与调用onPause
而不调用的某些原因不同。例如,如果屏幕超时或您按下待机按钮,则会调用,但可能不会调用(取决于可用内存和其他内容),因此它是一个“较轻的暂停”。即使在这种情况下,最终也可能会调用onstop,但不会立即调用。
好的,但是有什么用
通常没有特定的用途,但可能有。由于您的活动将在堆栈上保持其内存状态,即使在您启动其他一些活动之后,该堆栈也将随着启动的活动数(堆栈的高度)而增加。
在某些应用程序中,这可能会导致大量的内存使用。过了一会儿,框架将启动并杀死堆栈上的一些活动,但这相当直率,可能意味着返回时要保留许多状态。
因此,onStop
的一个例子是,如果您想在将活动留给另一个活动时释放一些状态,并在回来时重新创建它。
我使用它将ListAdapters设置为空、空的图像缓存和类似的(在非常特定的应用程序中)。如果要释放ListAdapter中可见视图使用的内存,可以在OnStart中重新创建该内存,并让GC获取这些视图。这将增加活动的其余记忆状态将继续存在的可能性。
当活动实例处于活动状态时,可以认为某些资源足够保存,而只有当它位于堆栈的前面时,才能认为某些资源足够保存。这取决于您决定什么是应用程序中最好的,而create/start/resume的粒度就为您提供了这一点。