我阅读了几篇描述onStart()
和onResume()
之间差异的帖子:当活动变为可见时调用onStart()
,当活动显示时调用onResume()
准备好来自用户的互动。细
我一直只是将代码添加到onPause()
和onResume()
,并且从未对onStart()
和onStop()
感到困扰。
任何人都可以举例说明您在onStart()
和onResume()
中可能会做些什么吗? onStop()
和onPause()
也是如此,onStop()
如何有用?我必须在这里遗漏一些基本的东西。
答案 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