Activity的生命周期与启动模式

来源:互联网 发布:限制安装软件 编辑:程序博客网 时间:2024/05/21 09:45
一、正常的生命周期
    正常情况下,Activity会经历如下的生命周期
    1)onCreate:表示Activity正在被创建;
    2)onRestart:表示Activity正在重新启动;从不可见-->可见状态;
    3)onStart:表示Activity正在被启动;此时Activity已经可见,但是没有出现在前台,无法交互;
    4)onResume:表示Activity已经可见,并且出现在前台并且开始活动;
    5)onPause:表示Activity正在停止,接着会执行onStop的;
    6)onStop:表示Activity即将停止;
    7)onDestory:表示Actiivty即将被销毁;

二、异常情况下生命周期
     这里分为两种情况考虑,当资源的系统相关配置发生变化时;系统内存不足时;
2.1 资源的相关配置发生变化时导致Actiivty被杀死而重建
    如当前Activity处于竖屏状态,如果屏幕突然旋转,由于系统配置发生改变,在默认情况下,Actiivty会被销毁并且重新创建。此时生命周期如下:
    
    1)当资源配置发生变化时,Activity会被销毁,同时onPause,onStop,onDestory会被执行,同时由于此时Activity被异常退出,系统会调用onSaveInstanceState来保存当前Activity的状态。该方法一定是在onStop方法之前调用。
    2)当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    
    1)standard:标准模式;每次启动一个Activity都会重新创建一个新的实例;谁启动这个Activity,那么这个Activity运行在启动它的那个Activity所在的栈中;eg:Activity A启动Activity B(standard模式),此时B会进入到A所在栈中;
    2)singleTop:栈顶复用模式;如果新Activity已经位于任务栈的栈顶,那么此Activity不会被创建,同时它的onNewIntent方法被回调;如果新Activity已存在但不位于栈顶,那么新Activity会被重新创建;
    3)singleTask:栈内复用模式;只要Activity在栈内,那么多次启动此Activity都不会重新创建实例;eg:启动Activity A,系统先查找是否存在A所在的任务栈,如果不存在,就重新创建一个任务栈,然后创建A的实例并把实例加入到栈内;如果A所需的任务栈存在,这时需要看任务栈内A实例是否存在,如果A实例存在,会把A实例调到栈顶并调用它的onNewIntent方法;如果A实例不存在,句创建A实例并将其加入栈内;
    4)singleInstance:单实例模式;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:字符串;有自己的语法;























0 0
原创粉丝点击