在了解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被系统杀死回收占用的资源,或没有启动
他们之间的转换关系如下:
写过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的管理,就是在多个Activity情况,对Activity的生命周期进行调度管理。Activity的管理主要涉及到ActivityThread,AcitivityManagerService,ActivityStack。