安卓重温基础--四大组件之Activity的生命周期

Activity 生命周期

通过实现回调方法管理 Activity 的生命周期对开发强大而又灵活的应用至关重要。 Activity 的生命周期会直接受到 Activity 与其他 Activity、其任务及返回栈的关联性的影响。

状态图

安卓重温基础--四大组件之Activity的生命周期_第1张图片
image.png

解读状态图

  1. 首次创建 Activity 时回调 onCreate()、onStart() 和 onResume() 方法进入运行态。一般在 onCreate() 方法中执行所有正常的静态设置 — 创建视图、将数据绑定到列表等等。 系统向此方法传递一个 Bundle 对象可以用于还原 Activity 的状态。不过一般是使用 onSaveInstanceState() 和 onRestoreInstanceState()。
  2. 当另一个 Activity 出现在当前 Activity 的上方,但是又未完全覆盖当前 Activity 或者有一个对话框在当前 Activity 的上方时,Activity 回调 onPause() 方法,进入暂停态。还原时回调 onResume() 重新进入运行态。也有可能在系统需要内存时被 finish 掉,这时需要重新创建 Activity。
  3. 当另一个 Activity 出现在当前 Activity 的上方,并且当前 Activity 完全不可见时,回调 onPause() 和 onStop() 方法,进入停止态。还原时回调 onRestart(),onStart() 和 onResume() 方法。和暂停态一样,也有可能在系统需要内存时被 finish 掉,这时需要重新创建 Activity。
  4. 当 Activity 被 finish 或者系统销毁时,回调 onDestroy() 方法,Activity 的生命周期结束。

Activity 基本以三种状态存在

  1. Running

此 Activity 位于屏幕前台并具有用户焦点。

  1. onPause()

另一个 Activity 位于屏幕前台并具有用户焦点,但当前 Activity 仍可见。例如,另一个 Activity 显示在此 Activity 上方,并且该 Activity 部分透明或未覆盖整个屏幕。处于暂停状态的 Activity 处于完全活动状态,即对象保留在内存中,它保留了所有状态和成员信息,并与窗口管理器保持连接),但在内存极度不足的情况下,可能会被系统终止。

  1. onStop()

当前 Activity 被另一个 Activity 完全遮盖(该 Activity 目前位于“后台”)。 处于停止状态的 Activity 同样仍处于活动状态(对象保留在内存中,它保留了所有状态和成员信息,但未与窗口管理器连接)。它对用户不再可见,在他处需要内存时可能会被系统终止。

系统处于暂停或停止状态时,系统可以要求其结束(finish掉),或者直接结束与该 Activity 有关的进程,将其从内存删除。Activity 被终止后必须重新 onCreate()。


实现 Activity 的回调

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.e("Activity生命周期","onCreate()");
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.e("Activity生命周期","onStart()");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.e("Activity生命周期","onRestart()");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.e("Activity生命周期","onResume()");
    }


    @Override
    protected void onPause() {
        super.onPause();
        Log.e("Activity生命周期","onPause()");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.e("Activity生命周期","onStop()");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.e("Activity生命周期","onDestroy()");
    }

Activity 的 整个生命周期 发生在 onCreate() 调用与 onDestroy() 调用之间。您的 Activity 应在 onCreate() 中执行“全局”状态设置(例如定义布局),并在 onDestroy() 中释放所有其余资源。例如,如果您的 Activity 有一个在后台运行的线程,用于从网络上下载数据,它可能会在 onCreate()中创建该线程,然后在 onDestroy() 中停止该线程。

Activity 的 可见生命周期 发生在 onStart() 调用与 onStop() 调用之间。在这段时间,用户可以在屏幕上看到 Activity 并与其交互。例如,当一个新 Activity 启动,并且此 Activity 不再可见时,系统会调用onStop() 。您可以在调用这两个方法之间保留向用户显示 Activity 所需的资源。 例如,您可以在 onStart() 中注册一个 BroadcastReceiver 以监控影响 UI 的变化,并在用户无法再看到您显示的内容时在 onStop() 中将其取消注册。在 Activity 的整个生命周期,当 Activity 在对用户可见和隐藏两种状态中交替变化时,系统可能会多次调用 onStart() 和 onStop()。

Activity 的 前台生命周期 发生在 onResume() 调用与 onPause() 调用之间。在这段时间,Activity 位于屏幕上的所有其他 Activity 之前,并具有用户焦点。Activity 可频繁转入和转出前台 。例如,当设备转入休眠状态或出现对话框时,系统会调用 onPause()。 由于此状态可能经常发生转变,因此这两个方法中应采用适度轻量级的代码,以避免因转变速度慢而让用户等待。

你可能感兴趣的:(安卓重温基础--四大组件之Activity的生命周期)