Android Framework Development Guide

Activity Life

Activity的生命周期

在了解Activity的启动流程之前,先来看下Activity的生命周期,这有助于理解Activity的管理和调度。

Activity的状态

  • 1.Resumed(或running):运行状态

    activity在屏幕前台,并且有用户焦点。

  • 2.Paused:暂停状态

    另一个activity在前台并且有用户焦点。但是这个activity仍然可见(visible)。另一个Activity在这个Activity上面,它部分透明或是没有覆盖整个屏幕。 一个暂停状态的activity完全是alive的(Activity对象保存在内存中,它保留着所有的状态和成员信息,依然附属于(attached to)window manager),但是在极其低存储空间的情况下会被系统杀掉。

  • 3.Stopped:停止状态

    activity完全被其他activity遮蔽(现在在后台)。 一个停止的activity也是alive的(Activity对象保存在内存中,它保留着所有的状态和成员信息,但是没有附属于(attached to)windowmanager)对用户不再可见,当内存在别处需要时,它随时可能被杀掉。

  • 4.Killed:死亡状态

    Activity被系统杀死回收占用的资源,或没有启动

他们之间的转换关系如下:

life-change

代码的表示

写过Android apk后,我们都知道activity有下面几个重要的回调函数,代表Activity的生命周期。

//创建Activity
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
//Activity快要变成可见的
    @Override
    protected void onStart() {
        super.onStart();
    }
//Activity变成可见的,处于运行状态
    @Override
    protected void onResume() {
        super.onResume();
    }
//其他Activity获得用户焦点,(Activity快要暂停了)
    @Override
    protected void onPause() {
        super.onPause();
    }
//Activity不再可见,处于停止状态
    @Override
    protected void onStop() {
        super.onStop();
    }
//Activity快要被销毁了
    @Override
    protected void onDestroy() {
        super.onDestroy();
   }
  }

这些方法定义了Activity完整的生命周期,实现这些方法,我们能监控Activity生命周期中的三个嵌套循环(monitor three nested loops in the activity lifecycle)

  • 1.Activity的entire lifetime(全部的生命期)发生在调用onCreate()和调用onDestory()之间。 在onCreate()方法中执行全局状态的建立(例如定义布局),在onDestroy()方法中释放所有保存的资源。

  • 2.Activity的visible lifetime(可见的生命期)发生在调用onStart()和onStop()之间。在这个期间,用户能在屏幕上看见Activity,和它进行交互。系统在Activity的完整寿命中可能多次调用onStart()和onStop(),正如Activity交替地对用户可见或隐藏。

  • 3.Activity的foreground lifetime (前台的生命期)发生在调用onResume()和onPause()之间。在这期间,Activity在屏幕上所有其他Activity的前面,有用户输入焦点。一个Activity能频繁的在前台进入和出去之间转变。

activity-life

总结

Activity的管理,就是在多个Activity情况,对Activity的生命周期进行调度管理。Activity的管理主要涉及到ActivityThread,AcitivityManagerService,ActivityStack。