本博客是《Android开发艺术探索》的笔记,文章不会照着书上一顿抄,而是按着自己的理解用例子和通俗易懂的语言来梳理书上的知识。希望能对也在读这本书的人起到一些帮助。
Activity
Activity是最常用的组件,它有一些不容易搞清楚的概念。
Activity无异常情况下的生命周期
Activity启动时会经历 onCreate→onStart→onResume
这里拿出比较难以理解的 onStart 和 Resume 这一组作对比
- onResume 和 onPause 通过这个 Activity 是否在前台来回调的
- onStart 和 onStop 通过这个 Activity 是否可见来回调的 打个比方
图
一个 Activity 上出现了一个弹窗,此时 Activity 不能和用户交互,即 Activity 不在前台,此时 onPause 会调用 但是这个Activity还是可以看得到的,所以 onStop 方法不会被调用。
多个Activity启动的调用顺序
如果有两个Activity,分别是A和B,当在A中启动B时调用顺序如下
A.onPause→B.onCreate→B.onStart→B.onResume
当旧的Activity完成onPause后,新的Activity才能启动,所以在onPause不能做费时的操作
###Activity异常情况下的生命周期 Activity在两种情况下会被销毁并重新创建。
- 系统配置改变,比如突然横屏
- 内存不足Activity销毁
简单来说,异常下的生命周期也就只是在正常的生命周期下插入了两个方法,一个方法用来储存销毁前的数据,一个方法用来恢复数据。
- onStop前插入了onSaveInstanceState
- onStart后插入了onRestoreInstanceState
这两个方法必须是异常销毁的情况下才会被调用 恢复数据也可以在onCreate中进行,但是由于onRestoreInstanceState被调用时,参数savedInstanceState肯定是有值的,而onCreate不一定有值,所以要做空判断处理。推荐用onRestoreInstanceState处理。
Activity的启动模式
Activity有四种启动模式, standard:系统默认的模式,谁启动了Activity,这个Activity就会启动在谁的任务栈中 singleTop:若 Activity 已经在栈顶则不会再创建,而是会调用onNewIntent方法 singleTask:比如 Activity A,A 会先寻找需要的任务栈,如果不存在,则新建任务栈,把A放进新任务栈中。如果存在所需要的任务栈,则会查看任务栈里是否有A,如果有A则清空A上的 Activity 并且调用它的 onNewIntent 方法,如果没有就在栈顶创建A。 singleInstance:单例模式,Activity 会创建一个新的任务栈,后续操作都不会重新创建这个Activity。
本文由 鸡米 创作,采用 知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Feb 13,2018