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

时间:2012-03-29 22:04:28

标签: android android-lifecycle

我阅读了几篇描述onStart()onResume()之间差异的帖子:当活动变为可见时调用onStart(),当活动显示时调用onResume()准备好来自用户的互动。细

我一直只是将代码添加到onPause()onResume(),并且从未对onStart()onStop()感到困扰。

任何人都可以举例说明您在onStart()onResume()中可能会做些什么吗? onStop()onPause()也是如此,onStop()如何有用?我必须在这里遗漏一些基本的东西。

3 个答案:

答案 0 :(得分:11)

(例如)

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

这与在没有onPause被调用的情况下调用onStop的一些原因不同。例如,如果屏幕超时或您按下标准按钮onPause将被调用,但可能不是onStop(取决于可用内存和诸如此类别),因此它是“较轻的暂停”。即使在这种情况下,也可能最终会调用onStop,但不会立即调用。

好的,但有什么用?

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

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

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

答案 1 :(得分:1)

onStart()在onCreate()结束其任务后工作。 这是放置broadcastReceiver或初始化关于UI的一些状态的好地方,当用户回到此活动时,该状态应该始终显示。

当您通过按后退按钮返回到Intent或Activity时,

onResume()会起作用。因此,每当不同的活动到达前台时,都会调用onPause。

答案 2 :(得分:0)

我认为你的问题在文档上有很好的解释:阅读Activity Life Cycle