Android回调方法

时间:2013-02-21 03:08:36

标签: android android-activity

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

  

当您的活动停止时,Activity对象将保持驻留状态   记忆,并在活动恢复时被召回。你不需要   重新初始化在任何回调期间创建的组件   导致恢复状态的方法。系统也跟踪   布局中每个View的当前状态,如果是用户   将文本输入到EditText小部件中,该内容将保留给您   不需要保存和恢复它。

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

3 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果您的活动已停止(即用户按下主页或处理来电),则不会销毁应用程序的进程(以及包含的活动)。

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

但是,过了一段时间后,操作系统可能会决定重新启动您应用的资源并决定终止该过程(或者用户可能会按下您家庭活动中的按钮)。在这种情况下,您应该保存活动状态,以便在用户返回应用程序时恢复活动状态。

您可以使用onSaveInstanceState

或仅存储onStop上的首选项()