当我阅读Android培训时,我看到了对活动生命周期的描述:
当您的活动停止时,活动对象将被保存在内存中,并在活动恢复时被召回。您不需要重新初始化在导致恢复状态的任何回调方法期间创建的组件。系统还跟踪布局中每个视图的当前状态,因此如果用户将文本输入到EditText小部件中,则保留该内容,因此不需要保存和恢复该内容。
我很困惑,如果我不需要重新初始化任何组件,为什么我必须处理数据或回调方法上的任何东西?
发布于 2013-02-21 03:19:53
以相机为例。
您不需要重新初始化任何组件,但是当活动恢复时,您需要重新初始化摄像机。组件arne并不是活动的唯一部分。大多数应用程序还需要访问系统资源。当应用程序暂停或停止时,您将释放这些资源,因此,当应用程序恢复时,您必须重新初始化它们。在某些情况下(内存不足等),Android可能会破坏应用程序。因此,您必须再次释放和重新初始化资源。
此外,您的应用程序可能存在某种内部状态。例如,读书人。你需要记录下进展。这个内部状态不是组件,但是您必须在活动暂停时保存它们。
@Override
public void onPause() {
super.onPause(); // Always call the superclass method first
// Release the Camera because we don't need it when paused
// and other activities might need to use it.
if (mCamera != null) {
mCamera.release()
mCamera = null;
}
}
@Override
public void onResume() {
super.onResume(); // Always call the superclass method first
// Get the Camera instance as the activity achieves full user focus
if (mCamera == null) {
initializeCamera(); // Local method to handle camera init
}
}发布于 2013-02-21 03:16:35
这种描述只适用于已停止的状态。还可以销毁已停止的活动,因此您可以将数据保存在onStop()中,以防该活动随后被销毁。虽然有一个onDestroy()回调,但不一定要调用它。当您的活动从暂停过渡到停止时,可以依赖于调用onStop()。请注意,在安卓的前蜂窝版本中,即使是onStop()也不一定可以依赖,而onPause()应该用于保存状态。在onStop()方法返回之前,蜂巢和后续版本不会扼杀一个活动。
发布于 2013-02-21 03:18:20
如果您的活动停止(即用户按home或他处理传入呼叫),应用程序的进程(和包含的活动)不会被破坏。
在这个场景中,您的组件已经初始化(这意味着,它们显示的是在活动停止之前所显示的内容),当活动再次出现时(用户重新打开您的应用程序),您就不必恢复任何类型的数据。
然而,过了一段时间,操作系统可能会决定将应用程序的资源隐藏起来,并决定终止进程(或者用户可能会从您的家庭活动中按后退按钮)。在另一个场景中,您应该保存活动状态,以便在用户返回应用程序时恢复活动状态。
您可以使用onSaveInstanceState
或者只存储到onStop()上的首选项
https://stackoverflow.com/questions/14993909
复制相似问题