1

当我阅读 Android Training 时,我看到了关于活动生命周期的描述:

当您的活动停止时,活动对象将保留在内存中,并在活动恢复时被调用。您不需要重新初始化在导致 Resumed 状态的任何回调方法期间创建的组件。系统还跟踪布局中每个视图的当前状态,因此如果用户在 EditText 小部件中输入文本,则该内容会保留,因此您无需保存和恢复它。

我很困惑,如果我不需要重新初始化任何组件,为什么我必须处理数据或回调方法上的任何东西?

4

3 回答 3

3

以相机为例。

您不需要重新初始化任何组件,但您需要在活动恢复时重新初始化相机。组件不是活动的唯一部分。大多数应用程序还需要访问系统资源。当您的应用程序暂停或停止时,您会释放这些资源,因此您必须在应用程序恢复时再次重新初始化它们。并且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-21T03:19:53.783 回答
0

该描述仅适用于停止状态。停止的活动也可以被销毁,因此想法是将数据保存在 onStop() 中,以防活动随后被销毁。虽然有 onDestroy() 回调,但不保证会被调用。当您的活动从暂停过渡到停止时,可以依赖 onStop() 被调用。请注意,在 Android 的 Honeycomb 之前的版本中,甚至不一定依赖 onStop(),并且应该使用 onPause() 来保存状态。在 onStop() 方法返回之前,Honeycomb 和后续版本不会终止活动。

于 2013-02-21T03:16:35.293 回答
0

如果您的活动停止(即用户按下主页或他处理来电),您的应用程序的进程(和包含的活动)不会被破坏。

在这种情况下,您的组件已经初始化(这意味着,它们正在显示它们在您的活动停止之前显示的内容)并且当活动再次被带到前面(用户重新打开您的应用程序)时,您不必恢复任何类型的数据。

但是,一段时间后,操作系统可能会决定回收您的应用程序的资源并决定终止该进程(或者用户可能会从您的主页活动中按下返回按钮)。在另一种情况下,您应该保存 Activity 的状态,以便在用户返回您的应用程序时恢复它。

您可以使用onSaveInstanceState

或者只是存储到 onStop() 上的首选项

于 2013-02-21T03:18:20.610 回答