onStop()总是以onPause()开头

时间:2013-11-05 15:57:28

标签: android

我已经读过,无论方案是什么,对onStop()的调用总是先调用onPause()。参考:http://developer.android.com/training/basics/activity-lifecycle/stopping.html

上的图1

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

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

不是吗?

在onStop()之前始终拥有onPause()的好理由是什么。我们可以在onStop()中做什么在onPause()中完成。 为什么我们在onStop()之前总是需要onPause()?

2 个答案:

答案 0 :(得分:25)

始终会调用

onPause()。这是有保证的。如果您需要在活动中保存任何状态,则需要将其保存在onPause()中。可以在onStop()之后调用onPause(),也可以不调用onPause()。取决于具体情况。

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

你问过

  

在onStop()之前始终拥有onPause()的好理由是什么。   我们可以在onStop()中执行onPause()中的操作。

如果Android想要执行其他操作,那么

onStop()始终会在您的Activity上调用。它可能会启动另一个Activity,这可能会导致您的Activity onResume()被调用。它可能只会针对您的活动致电onStop()。它可能会在不再调用您的生命周期方法的情况下终止您的进程。

由于无法保证调用onResume(),因此您无法始终在onStop()中执行onPause()中的操作。

在大多数活动中,您会发现需要在onPause()onStop()中添加代码。您通常无需在onStart()onRestart()或{{1}}中执行任何操作。

答案 1 :(得分:1)

不,始终会执行 onPause()方法。事实上,当你的活动失去焦点/停止/摧毁时,它是唯一可以保证被调用的方法。

查看此页面:Activity

  

的onResume()
  当活动开始与之交互时调用   用户。此时,您的活动位于活动堆栈的顶部,   用户输入转到它。 始终,然后是onPause()。