在活动的onPause()或onStop()状态下运行代码

时间:2015-08-22 21:10:04

标签: android android-activity android-lifecycle onpause

我的Android应用程序中有一个功能,每次用户尝试编辑他或她的个人资料时都需要运行。我的应用程序中有两个部分的编辑配置文件(请不要问为什么,它背后有一个非常冗长乏味的原因)。如果用户决定取消所有内容,我需要恢复用户在编辑配置文件的第一部分所做的更改。我在编辑个人资料的第二部分中设置了取消按钮,但我的问题是,如果用户按下设备上的返回按钮或主页按钮,该应用会调用onPause()onStop()?如何在活动的这两个阶段运行相同的代码?那些知道如何将代码放在不同状态的活动的人吗?我只是创建一个函数onPause()并将代码粘贴在那里吗?那会有用吗?

3 个答案:

答案 0 :(得分:5)

是的,它绝对应该有效。在您的情况下,您应该在onPause()方法中编写代码。

以下是活动生命周期的摘要:

<强>的onCreate():

首次创建活动时调用。这是您应该执行所有常规静态设置的地方:创建视图,将数据绑定到列表等。此方法还为您提供包含活动的先前冻结状态的Bundle(如果有)。 始终紧跟onStart()。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //Write your code here
}

<强>在onStart():

当活动对用户可见时调用。 如果活动到达前台,则按onResume(),如果隐藏,则按onStop()。

@Override
public void onStart() {
    super.onStart();
    //Write your code here
}

<强>的onResume():

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

@Override
public void onResume() {
    super.onResume();
    //Write your code here
}

<强>的onPause():

系统即将开始恢复上一个活动时调用。这通常用于将未保存的更改提交到持久数据,停止动画以及可能消耗CPU等的其他事情。此方法的实现必须非常快,因为在此方法返回之前,下一个活动将不会恢复。 如果活动返回到前面,则后跟onResume();如果用户不可见,则返回onStop()。

@Override
public void onPause() {
    super.onPause();
    //Write your code here
}

<强>的onStop():

当活动不再对用户可见时调用,因为另一个活动已恢复并且正在覆盖此活动。这可能是因为正在开始新活动,现有活动被带到这个活动之前,或者这个活动正在被销毁。 如果此活动返回与用户交互,则执行onRestart(),如果此活动消失,则执行onDestroy()。

@Override
public void onStop() {
    super.onStop();
    //Write your code here
}

<强>的onDestroy():

在您的活动被销毁之前收到的最后一个电话。这可能是因为活动正在完成(有人在其上调用finish(),或者因为系统暂时销毁此活动实例以节省空间。您可以使用isFinishing()方法区分这两种情况。

@Override
public void onDestroy() {
    super.onDestroy();
    //Write your code here
}

答案 1 :(得分:3)

你可以在onPause和onStop中做很多事情,只需记住在每个内容中调用super.onPause();super.onStop();或其他任何内容,只需遵循以下模式:

@Override
public void onPause() {
    super.onPause();  // Always call the superclass method first
    // Do what you want.
}

另外,如果您希望用户能够重新开始您的活动并编辑某些内容而不是关闭它,则可以致电onBackPressed()

@Override
public void onBackPressed() {
     super.onBackPressed();
     // You can just call onStop to close the app
     // or do what you want.
}

答案 2 :(得分:3)

只保证调用onPause