Android 在活动的onPause()或onStop()状态下运行代码
我的android应用程序中有一个功能,每次用户试图编辑其个人资料时都需要运行该功能。在我的应用程序中,编辑个人资料有两个部分(请不要问为什么,它背后有一个非常冗长乏味的原因)。如果用户决定取消所有操作,我需要还原用户在编辑配置文件的第一部分中所做的更改。我在编辑配置文件的第二部分中做了一个取消按钮,但我的问题是,如果用户按下设备上的返回按钮或主页按钮,应用程序调用Android 在活动的onPause()或onStop()状态下运行代码,android,android-activity,android-lifecycle,onpause,Android,Android Activity,Android Lifecycle,Onpause,我的android应用程序中有一个功能,每次用户试图编辑其个人资料时都需要运行该功能。在我的应用程序中,编辑个人资料有两个部分(请不要问为什么,它背后有一个非常冗长乏味的原因)。如果用户决定取消所有操作,我需要还原用户在编辑配置文件的第一部分中所做的更改。我在编辑配置文件的第二部分中做了一个取消按钮,但我的问题是,如果用户按下设备上的返回按钮或主页按钮,应用程序调用onPause()和onStop(),该怎么办?如何在活动的这两个阶段中运行相同的代码?有谁知道如何在活动中使用不同状态的代码?我是
onPause()
和onStop()
,该怎么办?如何在活动的这两个阶段中运行相同的代码?有谁知道如何在活动中使用不同状态的代码?我是否只需要创建一个函数onPause()
并将代码粘贴在其中?那行吗?行,肯定行。在您的情况下,应该使用onPause()方法编写代码
以下是活动生命周期的摘要:
onCreate():
在首次创建活动时调用。这是您应该执行所有常规静态设置的地方:创建视图、将数据绑定到列表等。此方法还为您提供包含活动先前冻结状态(如果存在)的捆绑包。
始终后跟onStart()
onStart():
当活动对用户可见时调用。
如果活动出现在前台,则后跟onResume(),如果活动隐藏,则后跟onStop()
@Override
public void onStart() {
super.onStart();
//Write your code here
}
onResume():
当活动将开始与用户交互时调用。此时,您的活动位于活动堆栈的顶部,用户输入将进入该堆栈。
始终后跟onPause()
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()方法区分这两种情况
您可以在onPause和onStop中执行许多操作,只需记住调用
super.onPause();
,super.onStop();
,或者在每个操作中执行您需要的任何操作,只需遵循以下模式。只需将代码添加到您的活动中,您就可以开始了
@Override
public void onPause() {
super.onPause(); // Always call the superclass method first
// Do what you want.
}
此外,如果您希望用户能够返回您的活动并编辑某些内容,而不是关闭它,则只需调用onBackPressed()
:
只有onPause才能保证被称为好吧,是的,它应该有效…你试过了吗?哈哈,不,我只是在写问题时考虑过,然后在发布后试过。是的,它有效。无论如何,谢谢:哈哈,没问题。:)检查我的更新答案,我已经解释了活动生命周期的每一点。希望这对你有帮助。:)
@Override
public void onStop() {
super.onStop();
//Write your code here
}
@Override
public void onDestroy() {
super.onDestroy();
//Write your code here
}
@Override
public void onPause() {
super.onPause(); // Always call the superclass method first
// Do what you want.
}
@Override
public void onBackPressed() {
super.onBackPressed();
// You can just call onStop to close the app
// or do what you want.
}