android:何时使用onStart(),onStop()?

Jef*_*man 17 android android-lifecycle

我读过几个职位描述之间的区别onStart()onResume():onStart()当活动变得可见被调用,onResume()当活动准备从用户交互调用.精细.

我一直只是添加了代码onPause()onResume(),从不与困扰onStart()onStop().

任何人都可以举一些具体的例子说明你可以做些什么onStart(),对比onResume()?这同样适用于onStop()onPause(),怎么会是onStop()有用的?我必须在这里遗漏一些基本的东西.

Seb*_*son 13

onStop()将(例如)当你离开某个其他活动的活动时调用(编辑:几乎.参见commonswares关于对话主题活动的评论).例如,如果您startActivity()在活动A中使用以启动活动B.当您在活动B中按回时,您将返回活动A onStart并将被调用.

这与onPause可能在onStop未被调用的情况下调用的一些原因不同.如果例如屏幕超时或你按下standy按钮onPause将被调用,但可能不会onStop(取决于可用的内存和诸如此类),所以它是"更轻的暂停".即使在这种情况下,也可能最终会调用onStop,但不会立即调用.

好的,但有什么用

通常没有具体用途,但可能有.由于即使在启动其他活动后,您的活动也会将其内存状态保留在堆栈中,因此该堆栈将随着启动的活动数量(堆栈高度)而增加.这可能会导致某些应用程序使用大量内存.过了一会儿,框架会启动并杀死堆栈上的一些活动,但这是相当生硬的,可能意味着返回时会保留很多状态.

因此,onStart/onStop如果您希望在将活动留给另一个活动时释放某个状态并在您返回时重新创建它,则使用示例.我用它将listadapters设置为null,空图像缓存和类似(在非常特定的应用程序中).如果要释放listadapter中可见视图使用的内存,可以在onstart中重新创建它,并让gc选择视图.这将增加活动的其余内存状态将存在的可能性.

有些资源可以被认为足够好,可以在活动实例处于活动状态时保存,有些资源只有在它位于堆栈前面时才能保存.您可以自行决定应用程序中的最佳选择,并创建/启动/恢复的粒度为您提供.

  • 当你将活动留给其他一些活动时,"onStop()将被调用" - 实际上,当你的活动不再可见时,它会被调用.如果以对话为主题的活动到达前台,则不会调用`onStop()`. (4认同)