Android (1)—Activity

这系列记录我看android 开发艺术探索这本书所总结的一些知识点。

Activity

  • 在onPause 和 onStop 方法里面尽量不要做耗时的操作,如果要做应该在onStop 方法里面做。

    从Activity A 中启动 Activity B,执行的顺序是 Activity A 的 onPause ,然后是B 的onCreate ,onStart, onResume
    后面是activity A 中的 onStop .

  • 系统只会在acitiviy异常终止时才会调用onSaveInstance 和 onRestoreInstance

    当横竖屏切换时,系统会调用 onSaveInstance ,在其重创建时,会把保存的bundle 对象传递给onRestoreInstance 方法
    和 onCreate 方法。所以我们可以通过判断这个判断acitivity 是否被重新创建了。 onCreate 方法里面的bundle 可能为空
    但是 onRestoreInstance 方法里面的bundle 对象一定不为空。

  • 切换屏幕不重新创建activity 的方法

    在API Level 大于13 时,为了再横竖屏切换时不重新创建Activity ,可以在xml 里面加入下面这句话
    Android:configChanges = “orientation| screenSize”
    这时候就不会调用到 onSaveInstance ,OnReStoreInstance 方法。而是调用了下面这个方法
    我们可以在onConfigurationChanged 方法里面做一些自己地特殊操作了。

  • Activity 的启动模式

    TaskAffinity 任务相关性,这个参数标识了一个activity 所需要的任务栈的名字。默认情况下为应用的包名。
    ==可以通过 adb shell dumpsys activity 命令来查看详细。==

    activity的四种启动模式网上介绍很多,我自己理解总结下面四句话。

    1. standard 标准模式,多次创建。
    2. singleTop 在任务栈顶就复用。
    3. singleTask 先找任务栈,找到了就把这个activity上面的都清出栈,没有就创建。
    4. singleInstance 新建单独的位于一个任务栈中,栈内复用。
  • IntentFilter匹配规则

    1. aciton 必须要有,且要相匹配。区分大小写。
    2. 因为系统会默认default所以可以不用匹配。
    3. data 和 action类似 。在设置data 时一定要用setDataAndType方法。

    在通过隐式意图启动activity时,可以通过PackageManager的resolveActivity方法或者 是Intent的 resolveActivity方法
    来判断是否找到,没找到就为空。

 public ComponentName resolveActivity(PackageManager pm) {
        if (mComponent != null) {
            return mComponent;
        }

        ResolveInfo info = pm.resolveActivity(
            this, PackageManager.MATCH_DEFAULT_ONLY);
        if (info != null) {
            return new ComponentName(
                    info.activityInfo.applicationInfo.packageName,
                    info.activityInfo.name);
        }

        return null;
    }
默认会传 PackageManager.MATCH_DEFAULT_ONLY 这个flag. 因为不含有Default 这个category 的activity是无法接收隐式意图的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值