一、正常的生命周期
正常情况下,Activity会经历如下的生命周期
1)onCreate:表示Activity正在被创建;
2)onRestart:表示Activity正在重新启动;从不可见-->可见状态;
没有出现在前台,无法交互;
4)onResume:表示Activity已经可见,并且出现在前台并且开始活动;
5)onPause:表示Activity正在停止,接着会执行onStop的;
6)onStop:表示Activity即将停止;
7)onDestory:表示Actiivty即将被销毁;
二、异常情况下生命周期
当资源的系统相关配置发生变化时;系统内存不足时;
2.1 资源的相关配置发生变化时导致Actiivty被杀死而重建
如当前Activity处于竖屏状态,如果屏幕突然旋转,由于系统配置发生改变,在默认情况下,Actiivty会被销毁并且重新创建。此时生命周期如下:
由于此时Activity被异常退出,系统会调用onSaveInstanceState来保存当前Activity的状态。该方法一定是在onStop方法之前调用。
当Activity被重建时,系统会调用onRestoreInstanceState,并把Activity销毁时onSaveInstanceState方法所保存的Bundle对象作为参数同时传递给onRestoreInstanceState和onCreate方法。
onRestoreInstanceState和onCreate接收Bundle对象区别:onRestoreInstanceState中的Bundle对象一定有值;onCreate中需要判断Bundle是否为null;
2.2 资源内存不足时导致低优先级Activity被杀死
Androidmanifest.xml中给Activity配置configChanges属性:
android:configChanges = "orientation | keyboardHidden"
三、Activity的启动模式
必须理解Activity的启动模式和标记位;
3.1 Activity的LaunchMode
四种LaunchMode
每次启动一个Activity都会重新创建一个新的实例;谁启动这个Activity,那么这个Activity运行在启动它的那个Activity所在的栈中;eg:Activity A启动Activity B(standard模式),此时B会进入到A所在栈中;
如果新Activity已经位于任务栈的栈顶,那么此Activity不会被创建,同时它的onNewIntent方法被回调;如果新Activity已存在但不位于栈顶,那么新Activity会被重新创建;
系统先查找是否存在A所在的任务栈,如果不存在,就重新创建一个任务栈,然后创建A的实例并把实例加入到栈内; 如果A所需的任务栈存在,这时需要看任务栈内A实例是否存在,如果A实例存在,会把A实例调到栈顶并调用它的onNewIntent方法;如果A实例不存在,句创建A实例并将其加入栈内;
Activity只能单独位于一个栈内;
如何给Activity设置启动模式
1)在Androidmanifest.xml中配置:android:launchMode="";
2)通过Intent中设置标志位来为Activity指定启动模式:优先级高
通过在Androidmanifest.xml中taskAffinity属性来指定Actiivty所在任务栈的。
四、IntentFilter的匹配规则
隐式调用需要Intent能够匹配目标组件的IntentFilter中所设置的过滤信息,包括action,category,data;
1)action:字符串;
2)category:字符串;
3)data:字符串;有自己的语法;