通常我们创建一个Android项目的时候,IDE工具通常都会帮我们生成一个默认的MainActivity
和它的布局文件.它就是本次的主角–Activity.
Activity
是Android的四大基本组件之一,基本的App开发根本离不开它.而要掌握Activity
的基本用法,只要熟悉和理解Activity
的生命周期就可以了.
Activity的生命周期
先来张熟悉的图片:
其实熟悉了这张图就可以掌握Activity的生命周期了.这张图讲述了Activity
在各种情况下的各种状态的转换.Activity
在各种状态之间转换都会回调相应的生命周期函数,我们可以复写相应的生命周期函数来完成我们需要完成的工作.1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32public class ExampleActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 当Activity被第一次创建时会被调用
}
protected void onStart() {
super.onStart();
// 当Activity变成可见时被调用
}
protected void onResume() {
super.onResume();
// 当Activity为当前焦点时被调用
}
protected void onPause() {
super.onPause();
// 当前Activity被抢占焦点,即别的Activity被调到前台
}
protected void onStop() {
super.onStop();
// 当前Activity,用户不可见
}
protected void onDestroy() {
super.onDestroy();
// Activity被销毁时调用
}
}
上面的代码是基本的Activity
生命周期函数,下面的表是对Activity
生命周期函数的总结.
生命周期函数 | 描述 | Killable after | 下一个被调用的生命周期函数 |
---|---|---|---|
onCreate() | 当第一次创建时被调用,可以在此方法进行初始化工作(创建View,绑定数据到列表…).此方法的参数是保存着Activity 之前状态的Bundle 对象 |
No | onStart() |
onRestart() | 在Activity 已被Stopped,并在重新启动前被调用 |
No | onStart() |
onStart() | 在Activity 变成用户可见前被调用,当Activity 变成前台时后跟onResume() ,当Activity 变成隐藏是后跟onStop() . |
No | onResume() 或onStop() |
onResume() | 在Activity 与用户开始交互前被调用,此时Activity 在任务栈的顶端 |
No | onPause() |
onPause() | 当其他Activity 被调到前台时调用,此方法通常用于保存持久性的数据,停止正在运行的动画,以及其他消耗CPU资源的任务.在此函数中应该执行快速的代码,因为在此函数返回前,准备调到前台的下一个Activity 是没有响应的.当此Activity 从后台返回前台时后跟onResume() ,当此Activity 变为不可见时后跟onStop() |
Yes | onResume() 或onStop() |
onStop() | 当Activity 不再被用户可见时调用.当Activity 被销毁时或其他Activity被调到前台时会发生这种情况.当Activity 被调回前台与用户交互时后跟onRestart() ,Activity 被销毁时后跟onDestroy() |
Yes | onRestart() 或onDestroy() |
onDestroy() | Activity 被销毁前调用,当finish() 被调用或者系统因内存不足回收空间时会发生这种情况.可以使用isFinishing() 来区分这两种情况. |
Yes | nothing |
上表中的Killable after
表示在通常情况下,函数返回后系统是否可以杀死Activity
所在的进程.