12

我已经读过,无论场景如何,对 onStop() 的调用总是先于对 onPause() 的调用。参考: http: //developer.android.com/training/basics/activity-lifecycle/stopping.html上的图 1

我们知道,当一个活动没有用户的焦点但它仍然部分可见时,它会暂停,当它完全不可见时,它就会停止。

现在在用户处于活动中并且从最近的应用程序窗口选择并进入另一个应用程序的情况下,活动将从恢复/运行进入停止状态。没有中间暂停状态。

不是吗?

在 onStop() 之前总是有 onPause() 的充分理由是什么?我们可以在 onStop() 中做 onPause() 中所做的事情。为什么我们总是在 onStop() 之前需要 onPause()?

4

2 回答 2

28

onPause()总是被调用。这是有保证的。如果您需要在活动中保存任何状态,则需要将其保存在onPause(). onStop()可以在 之后调用onPause(),也可以不调用。视情况而定。

有很多生命周期方法。您不需要覆盖所有这些。您只需要覆盖您需要(或想要)自定义活动行为的那些。有很多生命周期方法,因为不同的应用程序有不同的要求。Activity 的生命周期是有据可查且行为良好的。这允许程序员根据应用程序的特定要求将代码准确地放在需要的地方。

你问过

在 onStop() 之前总是有 onPause() 的充分理由是什么?我们可以在 onStop() 中做 onPause() 中所做的事情。

onPause()当 Android 想要做其他事情时,如果它位于前台,则总是在您的 Activity 上调用它。它可能会启动另一个 Activity,这可能会导致您的 ActivityonStop()被调用。它可能只是调用onResume()您的活动。它可能只是杀死你的进程而不调用你的任何生命周期方法。

由于onStop()不能保证会被调用,因此您不能总是在 onStop() 中执行 onPause() 中的操作

在大多数活动中,您会发现需要将代码放入onResume()onPause(). 您通常不必在或onStop()中执行任何操作。onStart()onRestart()

于 2013-11-05T17:43:52.973 回答
3

是的,onPause()方法将始终被执行。事实上,它是唯一保证在您的活动失去焦点/停止/销毁时调用的方法。

看看这个页面:活动

onResume()
当 Activity 再次开始与用户交互时调用。此时,您的活动位于活动堆栈的顶部,用户输入将转到它。始终跟随 onPause()。

于 2013-11-05T16:02:46.757 回答