Activity 与Activity调用栈分析
* 内容:Activity生命周期与工作模式
* Activity调用栈管理
*
* Activity作为四大组件中出现频率最高的组件,了解Activity,对于开发高质量的应用非常有用。
* 1)起源
* Activity是与用户交互的第一接口,它提供了一个用户完成指令的窗口。当开发组创建了Activity之后,
* 通过调用 setContentView(View);方法来给该Activity指定一个显示的界面,并以此为基础提供给用户交互的接口。
* 系统采用Activity栈的方式来管理Activity
2)Activity的形态
Activity一个最大的特点就是拥有多种形态,它可以在多种形态间切换,以此来控制自己的生命周期
Activity/Running
这时候,Activity出于Activity栈的最顶层,可见,与用户进行交互。
Paused
当Activity失去焦点的时候,被一个非全屏或者一个透明的Activity放置在栈顶时,Activity就转化为Paused状态,
但是它只是失去了与用户交互的能力,所有状态信息、成员变量都还保持着,只有在内存极低的情况下,才会被回收。
Stopped
如果一个Activity被另一个Activity完全覆盖,那么Activity就会进入Stopped状态。
此时它不在可见,但仍然保持着所有状态信息和成员变量。
Killed
当Activity被回收或者Activity从未被创建的时候,Activity出于Killed状态,由此可见,用户不同的动作,会让Activity在这四种
形态间切换。
3)声明周期
Activity的声明周期 onCreate—>onStart—>onResume—>onPause—>onStop—>onDestroy
只有三种状态是稳定的,其他状态都是过渡状态,马上会结束。
Resumed: 就是 Activity/Running状态,此时Activity出于栈顶状态。
Paused: 当Activity的一部分被挡住的时候就进入这个状态,这个状态下的Activity不会接收用户输入。
Stopped:当Activity完全被覆盖的时候进入这个状态,此时Activity不可见,尽在后台运行。
4)Activity启动与销毁过程
在系统调用onCreate之后,就会马上调用onStart,然后继续调用onResume以进入Resume状态,最后就会停在Resumed状态,完成启动
系统会调用onDestroy来结束Activity的生命周期让它回到Killed状态。
Activity的启动与销毁过程:
onCreate中,创建基本的UI元素。
onPause与onStop:清除Activity的资源,避免浪费。
onDestroy中,因为引用会在Activity销毁的时候销毁,而线程不会,所有清除开启的线程。
5)Activity的停止过程
栈顶的Activity不可见时,可以有两种状态,从部分不可见到可见,也就是恢复状态。
从部分不可见到完全不可见时,也就是停止过程。系统总会在当前Activity不可见时调用onPause方法
当Activity有部分不可见到可见的时候,调用 onPause--->onResume 栈顶
当Activity由不可见到可见的时候,都会调用onStart方法,onStop—>onRestart—>onStart—>onResume 栈顶