您的位置:首页 > 移动开发 > Android开发

Android开发艺术探索(一)——Activity的生命周期和启动模式

2016-05-08 11:06 260 查看

Activity的生命周期和启动模式

生命周期有?


1.典型情况下的生命周期—》指有用户参与的情况下,Activity所经过的生命周期改变

2.异常情况下的生命周期—》指Activity被系统回收或者由于当前设备的configuration发生改变而导致Activity被销毁重建


1.1 典型生命周期分析



  旧活动的OnPause先调用,新Activity才启动

  异常分析:

    1.资源相关的系统配置发生改变,导致Activity被杀死并重新创建  

      系统只在Activity导致终止的时候才会调用OnSaveInstanceState和OnRestoreInstanceState来存储和恢复数据,其他情况不会触发这个过程

    2.资源内存不足导致低优先级的Activity被杀死

      优先级: 前台Activity—> 可见非前台—> 后台Activity

  Q:怎样在系统配置发生改变时,活动不被创建?

  可配置configuration属性(在AndroidMenifest.xml中进行声明);如旋转屏幕时,configuration="orientation";

项目含义
mcc  SIM卡唯一标识IMSI(国际移动用户识别码)中的国家代码,有三位数字组成,

中国为460,此项标识mcc代码发生了改变

locale  设备的本地位置发生了改变,一般指切换了系统语言
keyboardHidden  键盘的可访问性发生了改变,比如用户调出了键盘
orientation  屏幕方向发生了改变
touchscreen  触摸屏发生了改变
keyboard  键盘类型发生了改变,比如用户使用了外插键盘
navigation  系统导航方式发生了改变,比如采用了轨迹球导航
screenLayout   屏幕布局
fontScale  系统字体缩放比例
uiMode  用户界面模式发生了改变,比如是否开启了夜间模式
screenSize  当屏幕的尺寸信息发生了改变,当旋转设备屏幕时,屏幕尺寸会发生变化
smallestScreeSize  设备的物理屏幕尺寸发生改变,这个项目和屏幕的方向没有关系  
LayoutDirection  当布局方向发生变化
mnc  SIM卡唯一标识IMSI()中的运营商代码,由两个数字组成,移动00 联通 01
1.2 Activity启动模式

  有哪些模式?

    Standard:标准模式

    SingleTop:栈顶复用模式

    SingleTask:栈内复用模式

    SingleInstance:单实例模式

  Q:如何给Activity指定启动模式呢?

    方法一: 通过AndroidMenifest.xml 为其指定;如android:launchMode="SingleTask";'

    方法二:在Intent设置中设置; 如:intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    二者的区别如下:

       1.二者同时存在时,以第二种为主;

       2.前者不能设定 FLAG_ACTIVITY_CLEAR_TOP;后者不能为Activity 指定SingleInstance模式。

  Activity的Falgs标志位

    FLAG_ACTIVITY_NEW_TASK 为Activity指定“single Task” 启动模式

    FLAG_ACTIVITY_SINGLE_TOP 为Activity指定“single Top”启动模式

    FLAG_ACTIVITY_CLEAR_TOP 具有此标记位的Activity,当它启动时,在同一任务栈中,所有位于它上面的Activity都需要出栈

    FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 具有此标记的Activity,不会出现在历史 Activity的列表中

1.3 IntentFilter的匹配规则

  一个Activity中可以有多个intent-filter ,一个Intent只要能匹配任何一组Intent-filter,即可启动对应的Activity

      intent-filter 中过滤信息有 action、Category、 data、...

        action: 匹配区分大小写(必须有一个,且和过滤规则中某个action相同)

              只需要Intent中的action能够和过滤规则中的任何一个action匹配即可

        Category:Intent中可以没有(系统会在加载startActivity/startActivityForResult时,匹配默认的category—DEFAULT),但若有,不管几个,每个都要能够和过滤规则中任何一个category相同;

        data:必须含有data数据,且data数据能够安全匹配过滤规则中某个data

     注:URI中schema 有默认值 content和file;

       如果要为Intent指定完整的data,必须要调用setDataAndType 方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: