Android回调方法

Android回调方法,android,android-activity,Android,Android Activity,当我阅读Android培训时,我看到了活动生命周期的描述: 当活动停止时,活动对象将保持驻留状态 当活动恢复时,将调用内存和。你不需要 重新初始化在任何回调过程中创建的组件 方法导致恢复状态。该系统还保持跟踪 布局中每个视图的当前状态,因此如果 在EditText小部件中输入文本,该内容将被保留,以便 不需要保存和恢复它 我很困惑,如果我不需要重新初始化任何组件,为什么我必须处理回调方法上的数据或任何东西?该描述仅适用于停止状态。停止的活动也可以被销毁,因此您可以将数据保存在onStop()中,

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

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


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

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

如果活动停止(即用户按下home键或他处理传入呼叫),则应用程序的进程(以及包含的活动)不会被破坏

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

但是,一段时间后,操作系统可能会决定重新命名应用程序的资源,并决定终止进程(或者用户可能会在您的家庭活动中按下后退按钮)。在另一个场景中,您应该保存活动的状态,以便在用户返回应用程序时将其还原

你可以用


或者只需将首选项存储在桌面上()

以摄像头为例

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