读书笔记—Activity的生命周期和启动模式
来源:互联网 发布:淘宝客买家入口在哪里 编辑:程序博客网 时间:2024/06/05 16:38
Activity的生命周期和启动模式
Activity的生命周期
1.生命周期对应关系
onCreate-onDestroy:创建-销毁onStart-onStop:可见-不可见onResume-onPause:可交互-不可交互
2.如果Activity设置了透明主题,则不会调用onStop
3.Activity启动过程简介:
启动Activity的请求会由Instrumentation处理,然后它通过Binder向AMS发送请求,AMS内部维护着一个ActivityStack并负责栈内的Activity的状态同步,AMS通过ActivityThread去同步Activity的状态从而完成生命周期方法的调用。
4.在新Activity启动之前,栈顶的Activity需要先onPause后,新Activity才会启动。
5.onPause和onStop都不能执行耗时的操作,尤其是onPause,也就是说,我们应当尽量在onStop中做操作,从而使得新Activity尽快显示出来并且切换到前台。
6.异常情况下的生命周期分析:
1.资源现相关的系统配置发生变化导致Activity被杀死并重新创建
- 默认情况下,系统配置发生改变后会导致Activity销毁并重新创建,需要对数据进行保存
- 保存数据的两种方式:
1.onSaveInstanceState()——onRestoreInstanceState()|onCreate() 1.1 onSaveInstanceState() (1)来保存当前Activity的状态,这个方法的调用时机是在onStop之前,它和onPause没有既定的时序关系。 (2)这个方法只会出现在Activity被异常终止的情况下,正常情况下系统不会回调这个方法。 (3) 系统只有在Activity即将被销毁并且有机会重新显示的请下才会调用。 1.2 onRestoreInstanceState(Bundle bundle) (1) 和onCreate都可以来判断Activity是否重建 (2) 调用时机在onStart之后。 (3) 一旦被调用,其参数Bundle一定是有值的,不需要额外进行判空。 (4) 使用onCreate进行数据恢复时,其参数Bundle有可能为空,此时必须进行判空操作。2.声明Activity的configChanges属性 android:configChanges="orientation|screenSize|keyboardHidden"
2.资源内存不足导致低优先级的Activity被杀死
- 按照优先级从高到低,分为三种:
1.前台Activity2.可见但非前台Activity3.后台Activity
Activity的启动模式
1.任务栈是一种“后进先出”的栈结构
2.四种启动模式:
1.standard:标准模式2.singleTop:栈顶复用模式3.singleTask:栈内复用模式4.singleInstance:单实例模式
3.标准模式:standard
- 1.谁启动了这个Activity,那么这个Activity就会运行在启动它的那个Activity所在的栈中。
- 2.ApplicationContext启动标准模式的Activity会出现的问题
Calling startActivity from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag.Is this really what you want?
4.栈顶复用模式:singleTop
- 1.如果新Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建,同时它的onNewIntent方法会被调用。
5.栈内复用模式:singleTask
- 1.只要Activity在一个栈中存在,那么多次启动此Activity都不会重新创建实例,并会回调onNewIntent方法。
- 2.singleTask默认具有clearTop效果,会导致栈内所有在该Activity上面的Activity全部出栈。
- 3.当一个具有singleTask模式的Activity请求启动后,系统首先会寻找是否存在该Activity
想要的任务栈
,如果不存在,就重新创建一个任务栈,然后创建Activity的实例后把Activity放到栈中。如果存在所需要的任务栈,这是要看Activity是否在栈中有实例存在,如果有实例存在,那么系统就会把Activity调到栈顶并调用它的onNewIntent方法,如果实例不存在,就创建实例并压入栈中。(需要仔细理解)
6.单实例模式:singleInstance
- 1.这是一种加强的singleTask模式,具有singleTask模式的所有特性。
- 2.具有此模式的Activity只能
单独位于一个任务栈
中。
7.TaskAffinity:任务相关性
- 这个参数标识了一个Activity所需要的任务栈的名字,默认情况下,所有Activity所需要的任务栈的名字为应用的包名。
- TaskAffinity属性主要和singleTask启动模式或者allowTaskReparenting属性配合使用。
当TaskAffinity和allowTaskReparenting结合使用的时候,会产生特殊的效果。当一个应用A启动了应用B的某个Activity后,如果这个Activity的allowTaskReparenting设置为true的话,那么当应用B被启动后,此Activity会直接从应用A的任务栈转移到应用B的任务栈中。
8.常用的adb命令
1.查看运行的activity:adb shell dumpsys activity
9.Activity的Flags
1.FLAG_ACTIVITY_NEW_TASK:singleTask的启动模式2.FLAG_ACTIVITY_SINGLE_TOP:singleTop的启动模式3.FLAG_ACTIVITY_CLEAR_TOP:清除栈顶4.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS具有此标记的Activity不会出现在历史Activity列表中。等同于在xml中指定属性android:excludeFromRecents="true"
0 0
- 读书笔记—Activity的生命周期和启动模式
- Activity的生命周期和启动模式—-读书笔记
- 读书笔记--Activity的生命周期和启动模式(一)
- 读书笔记(1) Activity的生命周期和启动模式
- 《Android开发艺术探索》读书笔记——Activity的生命周期和启动模式
- 读书笔记Activity生命周期和启动
- Activity的生命周期和启动模式
- Activity的生命周期和启动模式总结
- Activity的生命周期和启动模式
- Activity的生命周期和启动模式
- Activity的生命周期和启动模式
- Activity的生命周期和启动模式
- Activity的生命周期和启动模式
- Activity的生命周期和启动模式
- 第一章 Activity的生命周期和启动模式
- 第一章 Activity的生命周期和启动模式
- Activity的生命周期和启动模式
- Activity的生命周期和启动模式详解
- 第6周项目1-分数类的雏形(3)
- Oracle之BBED之BBED的编译及简单设置(一)
- 利用DOM和SAX解析XML文档
- 第一届CCF计算机软件能力认证(一二两题)
- 第六周 项目1-分数类的雏形
- 读书笔记—Activity的生命周期和启动模式
- 设计模式(1)之简单工厂模式
- C语言(undefined behavior)未定义-序
- C++上机作业
- Jquery-window.onload与$(document).ready()的对比
- Python 编码 Unicode utf-8
- 十个随机变量的求和
- 解决did not call through to super.onDestroy()
- 弹簧动画