22

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

我一直只是在 and 中添加代码onPause()onResume()从不打扰onStart()and onStop()

任何人都可以给出一些具体的例子来说明你可能会做onStart()什么onResume()onStop()和 也一样onPause(),有什么onStop()用?我必须在这里遗漏一些基本的东西。

4

3 回答 3

15

onStop()将(例如)在您离开活动以进行其他活动时被调用(编辑:几乎。请参阅关于对话框主题活动的 commonswares 评论)。例如,如果您startActivity()在活动 A 中使用来启动活动 B。当您在活动 B 中按回时,您将返回到活动 A 并被onStart调用。

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

好的,但是有什么用

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

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

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

于 2012-03-29T22:17:09.347 回答
1

onStart() 在 onCreate() 结束其任务后工作。这是放置广播接收器或初始化有关 UI 的某些状态的好地方,这些状态应在用户返回此活动时始终显示。

当您通过按后退按钮返回 Intent 或 Activity 时,onResume() 起作用。因此,每次有不同的活动进入前台时,都会调用 onPause。

于 2012-03-29T22:20:47.107 回答
0

我认为您的问题在文档中得到了很好的解释:阅读有关活动生命周期的信息

于 2012-03-29T22:12:33.220 回答