前言
在了解Activity的时候,我们需要先了解下Context这个类。
Activity生命周期
状态说明
状态 | 说明 |
---|---|
活动状态 | 当Activity在用户界面中处于最上层,完全能被用户看到,能够与用户进行交互,则这个Activity处于活动状态。 |
暂停状态 | 当Activity在界面上被部分遮挡,该Activity不再处于用户界面的最上层,且不能与用户进行交互,则这个Activity处于暂停状态。 |
停止状态 | 当Activity在界面上完全不能被用户看到,也就是说这个Activity被其他Activity全部遮挡,则这个Activity处于停止状态。 |
非活动状态 | 活动状态、暂停状态和停止状态是Activity的主要状态,不在以上三种状态下的Activity的则处于非活动状态。 |
状态变换图
- Activity启动后处于活动状态,此时的Activity位于界面的最上层,是与用户正在进行交互的组件,因此Android系统会努力保证处于活动状态的Activity的资源需求,资源紧张的时候可以终止其他状态的Activity;
- 如果用户启动了新的Activity,部分遮挡了当前的Activity,或新的Activity是半透明的,则当前的Activity转换为暂停状态,Andorid系统仅为处于活动状态的Activity释放资源时才终止处于暂停状态的Activity;
- 如果用户启动新的Activity 完全遮挡了当前的Activity,则当前的Activity转变为停止状态,停止状态的Activity将优先被终止;
- 活动状态的Activity被用户关闭后,以及暂停状态或者停止状态的Activity被系统终止后,Activity便进入了非活动的状态。
- 注意: 一般来说,Andorid系统会优先终止处于停止状态,且位置靠近栈底的Activity,因为这些Activity被用户再次调用的机会最小,且在界面上用户是看不到的。
事件回调事件
Activity生命周期的事件回调函数
函数 | 是否可终止 | 说明 |
---|---|---|
onCreate() | 否 | Activity启动后第一个被调用的函数,常用来进行Activity的初始化,例如创建View、绑定数据或者回复信息等。 |
onStart() | 否 | 当Activity显示在屏幕上,该函数被调用。一般用来初始化与更新界面相关的资源。 |
onRestart() | 否 | 当Activity从停止状态进入活动状态前,调用该函数。 |
onResume() | 否 | 当Activity可以接收用户输入(获得焦点)的时候,该函数被调用。此时的Activity位于Activity栈的栈顶。 |
onPause() | 否 | 当Activity进入暂停状态的时候,该函数被调用。主要用来保存持久数据,关闭动画、释放CPU资源等。该函数中的代码必须简短,因为另一个Activity必须等待该函数执行完毕之后才能显示在界面上。 |
onStop() | 是 | 当Activity不对用户可见后,该函数被调用,Activity进入停止状态。一般用来暂停或停止与更新界面相关的操作。 |
onDestory() | 是 | 在Activity被终止前,即进入非活动状态前,该函数被调用。 有两种情况该函数会被调用:1. 程序主动调用finish()函数;2.程序被Android系统终结。 |
注意:
onPause()
方法控制Activity
是否具有交互的功能。onStop()
方法控制Activity
是否具有可视化的功能。
Activity状态保存/恢复的事件回调函数
函数 | 说明 |
---|---|
onSaveInstanceState() | 暂停或者停止Acitivity前调用该函数,用以保存Activity的临时状态信息。 |
onRestoreInstanceState() | 恢复onSaveInstanceState()保存的Activity状态信息。 |
Activity的生命周期的四个不同的阶段
Activity的生命周期可划分为4个不同的阶段,且在不同的阶段按一定的顺序执行相应的事件回调函数。
- 启动Activity
- 在这个阶段依次执行3个事件回调函数:onCreate → onStart → onResume
- Activity失去焦点
- 在这个阶段依次执行2个事件回调函数:onPause → onStop
- Activity重新获得焦点
- 如果Activity重新获得焦点,会依次执行3个事件回调函数:onRestart → onStart → onResume
- 关闭Activity
- 当Activity被关闭时,会依次执行3个事件回调函数:onPause → onStop → onDestroy
onPause函数执行过程中改变系统执行轨迹的情况
- 当Activity失去焦点或被正常关闭时,系统将自动执行onPause函数,其正常执行顺序分别为: onPause → onStop → onPause → onStop → onDestroy
- 如果在执行onPause函数的过程中Activity重新获得了焦点,然后又失去了焦点,系统将不会按照上述顺序在其之后执行onStop函数,而是按照如下顺序执行相应的事件回调函数:onPause → onResume → onPause
onStop函数执行过程中改变系统执行轨迹的情况
- 当Activity被正常关闭时,系统将自动执行onStop函数,其正常执行顺序为: onPause → onStop→ onDestroy
- 如果在执行onStop函数的过程中Activity重新获得了焦点,然后又失去了焦点,系统将不会按照上述顺序在其之后执行onDestroy函数,而是按照如下顺序执行相应的事件回调函数:onStop → onRestart → onStart → onResume → onPause → onStop
常见的Activity子类
Andorid常见Activity子类使用介绍。
ListActivity
/**
* @author notzuonotdied
* @date 18-1-8
* @describe TODO
*/
public class TestListActivity extends ListActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 创建ListView要用的ArrayList
List<String> items = fillArray();
ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
android.R.layout.simple_list_item_1, items);
setListAdapter(adapter);
}
private List<String> fillArray() {
List<String> items = new ArrayList<>();
items.add("Java");
items.add("Kotlin");
items.add("Scala")