Activity

2017-10-10  本文已影响0人  珞神

前言

正文

一、Activity 的生命周期

分两种: 正常情况下和异常情况下的生命周期

1.1 正常情况下的生命周期,从上到下

还有一个 onRestart() 方法,此方法表示 Activity 正在重新启动,一般情况下在 Activity 从不可见到可见状态的时候,会调用此方法,比如说 A 跳转到 B 然后再返回 A

1.2 异常情况下的生命周期
1.2.1 资源相关的系统配置发生改变导致 Activity 被杀死并重新创建

比如说,横竖屏切换的时候,显示的图片资源及布局文件等系统配置发生改变,默认情况下,Activity 会被销毁并重新创建,其生命周期方法如下:

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

这种方式与上边的第一种情况保存和恢复数据的方法一致,这里说下 Activity 的优先级,从高到低,如下所示:

另外注意,如果一个进程中没有四大组件运行,那么这个进程将会很快被杀死!

1.2.3 阻止 Activity 重新创建

在 AndroidMenifest.xml 中为 Activity 添加一条 configChanges 属性 :

 android:configChanges="orientation"

常用属性值的含义:

二、Activity 的启动模式

2.1 四种启动模式
2.2 为 Activity 指定启动模式
android:launchMode="singleTop"
Intent intent = new Intent(this,TextActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
  1. 优先级,第二种要高于第一种,两种都存在的话,以第二种为准;
  2. 限定范围不同,第一种无法为 Activity 指定 FLAG_ACTIVITY_CLEAR_TOP 标识,第二种无法为 Activity 指定 singleInstance 模式!
2.3 Activity 的 Flags

Activity 的 Flags 有很多,作用也很多,有些可以设定 Activity 的启动模式,有些可以影响 Acticity 的运行状态,这里记录些比较常用的 Flags

三、Activity 中 IntentFilter 匹配规则

3.1 action 的匹配规则
3.2 category 的匹配规则
3.3 data 的匹配规则
<data android:scheme="aaa"
 android:host="aaa"
 android:port="aaa"
 android:path="aaa"
 android:pathPattern="aaa"
 android:pathPrefix="aaa"
 android:mimeType="aaa"/>

主要是有两部分组成 mimeType 和 Uri

  1. mimeType 指媒体类型 例如: image/jpeg vided/* ...
  2. Uri 的结构如下:
<scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]

Uri 的属性介绍如下:

scheme:整个URI的模式,如常见的http,file等,注意如果URI中没有指定的scheme,那么整个uri无效
host:URI的域名,比如我们常见的www.mi.com,www.baidu.com,与scheme一样,一旦没有host那么整个URI也毫无意义;
port:端口号,比如80,很容易理解,只有在URI中指定了scheme和host之后端口号才是有意义的;
path,pathPattern,pathPrefix包含路径信息,path表示完整的路径,pathPattern在此基础上可以包含通配符,pathPrefix表示路径的前缀信息;
        <activity android:name=".TextActivity">

            <intent-filter>
                <action android:name="111"></action>
                <category android:name="android.intent.category.DEFAULT"></category>
                <data android:scheme="222"></data>
            </intent-filter>

        </activity>
        Intent intent = new Intent();
        intent.setAction("111");
        // scheme:// 固定写法,后边的 111 是自己随便写的
        intent.setData(Uri.parse("222://111"));

        startActivity(intent);
        <activity android:name=".TextActivity">

            <intent-filter>
                <action android:name="111"></action>
                <category android:name="android.intent.category.DEFAULT"></category>
                <data android:mimeType="image/*"></data>
            </intent-filter>

        </activity>
        Intent intent = new Intent();
        intent.setAction("111");
        // 这种情况,scheme 默认为 content ,亲测 file 会报错
        //注意此处是 setDataAndType 
        intent.setDataAndType(Uri.parse("content://111"),"image/png");
        startActivity(intent);
上一篇下一篇

猜你喜欢

热点阅读