android:何时使用onStart()、onStop()



我读过几篇文章,描述了onStart()onResume()之间的区别:当活动变得可见时调用onStart(),当活动准备好与用户交互时调用onResume()。好的

我一直只是在onPause()onResume()中添加代码,从未为onStart()onStop()而烦恼。

有人能举一些具体的例子说明你在onStart()onResume()中可能会做什么吗?onStop()onPause()也是如此,onStop()有什么用处?我一定错过了一些基本的东西。

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

这与CCD_ 17可能在不调用CCD_ 18的情况下被调用的一些原因不同。例如,如果屏幕超时或按下待机按钮,则会调用onPause,但可能不会调用onStop(取决于可用内存等),因此这是一个"较轻的暂停"。即使在这种情况下,onStop最终也可能被调用,但不会立即调用。

好的,但是有什么用

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

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

一些资源可以被认为足够好,可以在活动实例处于活动状态时保存,而有些资源只有在它位于堆栈的前面时才保存。这取决于您决定应用程序中什么是最好的,创建/启动/恢复的粒度为您提供了这一点。

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

onResume()在按返回按钮返回Intent或Activity时工作。因此,每当不同的活动出现在前台时,都会调用onPause。

我认为你的问题在文档中已经得到了很好的解释:阅读活动生命周期

最新更新