一、正常的生命周期

正常情况下,Activity会经历如下的生命周期

1)onCreate:表示Activity正在被创建;

    2)onRestart:表示Activity正在重新启动;从不可见-->可见状态;

没有出现在前台,无法交互;

    4)onResume:表示Activity已经可见,并且出现在前台并且开始活动;

    5)onPause:表示Activity正在停止,接着会执行onStop的;

    6)onStop:表示Activity即将停止;

    7)onDestory:表示Actiivty即将被销毁;

android startactivity 失效 activity restart_启动模式

二、异常情况下生命周期

当资源的系统相关配置发生变化时;系统内存不足时;

2.1 资源的相关配置发生变化时导致Actiivty被杀死而重建

如当前Activity处于竖屏状态,如果屏幕突然旋转,由于系统配置发生改变,在默认情况下,Actiivty会被销毁并且重新创建。此时生命周期如下:

    

android startactivity 失效 activity restart_启动模式_02

由于此时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指定启动模式:优先级高

    

android startactivity 失效 activity restart_生命周期_03

通过在Androidmanifest.xml中taskAffinity属性来指定Actiivty所在任务栈的。

四、IntentFilter的匹配规则

    隐式调用需要Intent能够匹配目标组件的IntentFilter中所设置的过滤信息,包括action,category,data;

    1)action:字符串;

    2)category:字符串;

    3)data:字符串;有自己的语法;