Android开发艺术探索读书笔记(第一章)

第1章 Activity的生命周期和启动模式

1. Activity的生命周期全面分析
  1. onPause必须先执行完,新Activity的onResume才会执行,所以不要做太耗时的工作;
  2. 如果新Activity采用了透明主题,那么当前Activity不会回调onStop;
  3. onSaveInstanceState只会在Activity被异常终止的情况下才会被调用,时间是onStop之前,可能在onPause之前,也可能在之后;
  4. onRestoreInstanceState在onStart之后;onSaveInstanceState保存的参数会传递给onCreate和onRestoreInstanceState,二者的区别是:onRestoreInstanceState一旦被调用,其参数一定是有值的,不用判空;但onCreate不行,如果正常启动的话,其参数为空,所以必须要判空;
  5. 指定configChanges可以阻止系统匹配改变导致的Activity重建;常用的属性有locale,orientation,keyboardHidden,screenSize(API>13);
2. Activity的LaunchMode
  1. standard:标准模式,谁启动就在谁的栈中;ApplicationContext无法启动该模式,因为ApplicationContext没有所谓的任务栈,解决方式为指定FLAG_ACTIVITY_NEW_TASK标记位;
  2. singleTop:栈顶复用模式,如果位于栈顶,不创建新实例,onNewIntent会被调用;
  3. singleTask:栈内复用模式,自带clearTop效果,在所需任务栈中存在,不创建新实例,调用onNewIntent;
  4. singleInstance:单实例模式,singleTask+单独一个栈;
  5. TaskAffinity 任务栈
    1. 与singleTask搭配:Activity运行在名字和TaskAffinity相同的任务栈中;
    2. 与allowTaskReparenting结合:当一个应用A启动了应用B的某个Activity后,如果该Activity指定了该属性为true的话,当B被启动后,该Activity会从A的任务栈转移到B的任务栈;
3. Activity的Flags
  1. FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS:具有这个标记的Activity不会出现在历史Activity的列表中,等同于在xml中指定android:excludeFromRecents=”true”;
4. IntentFilter的匹配规则
  1. IntentFilter中的过滤信息有action、category、data;
  2. 一个过滤规则中可以有多个action,只需要匹配任意一个;
  3. 为了接收隐式意图,必须指定“android.intent.category.DEFAULT”这个category;
  4. data的匹配规则

    1. data的语法:

          <data android:scheme="string"
              android:host="string"
              android:port="string"
              android:path="string"
              android:pathPattern="string"
              android:pathPrefix="string"
              android:mimeType="string" />
    2. Uri的结构:

      <scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]

      eg:

      content://com.example.project:200/folder/subfolder/etc
      http://www.baidu.com:80/search/info

      Scheme:URI的模式;

      Host:URI的主机名;

      Port:URI中的端口好;

      Path、pathPattern和pathPrefix:路径信息,path表示完整的路径;pathPattern也表示完整的路径,但是里面可以包含通配符”*”;pathPrefix表示路径的前缀信息;

  5. 只指定mimeType的Uri有默认值,例如”image/*”,默认为content和file;

  6. setData和setType会互相清除,完整的data要调用setDataAndType;
  7. 隐式启动Activity时,调用PackageManager或者Intent的resolveActivity方法,判断是否有匹配的Activity;

    // 返回所有成功匹配的Activity信息
    public abstract List<ResolveInfo> queryIntentActivities(Intent intent, int flags);
    // 返回最佳匹配的Activity信息
    public abstract ResolveInfo resolveActivity(Intent intent, int flags);

    上述方法中第二个参数要使用“MATCH_DEFAULT_ONLY”这个标记位,这个标记位的含义是仅仅匹配那些在intent-filter中声明了“android.intent.category.DEFAULT”这个category的Activity,因为不含这个声明的会导致startActivity失败;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值