Android开发拾穗

Android 四大组件与 Intent

2019-03-31  本文已影响0人  a57ecf3aaaf2

一、Activity

四种启动模式

standard 标准启动模式,也是默认启动模式,任务栈中允许存在多个实例。

singleTop 同一个任务栈中,若 Activity 已在栈顶,那么会重用该实例,而不会新建一个实例,同时会调用 onNewIntent() 方法。

singleTask 同一个任务栈中,若 Activity 已存在该栈中,那么会重用该实例,而不会新建一个实例,同时会调用 onNewIntent() 方法。

singleInstance 同一个系统中,若 Activity 已在一个单独的任务栈中,那么会重用该实例,而不会新建一个实例,同时会调用 onNewIntent() 方法。

Activity Flags

FLAG_ACTIVITY_NEW_TASK 为 Activity 指定 singleTask 模式,效果与在 XML 中指定效果一样。

FLAG_ACTIVITY_SINGLE_TOP 为 Activity 指定 singleTop 模式,效果与在 XML 中设置的相同。

FLAG_ACTIVITY_CLEAR_TOP 具有此标记的 Activity 启动时,同一个任务栈中,它上面的所有 Activity 都要出栈。一般与上面两个标记配合使用,若复用已存在的 Activity,则同时会调用 onNewIntent() 方法。singleTask 启动模式默认具有 clear top 功能。

FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 具有这个标记的 Activity 不会出现在最近使用的应用程序列表中。等同于在 XML 中指定 excludeFromRecents 为 true。

五、Intent 的匹配规则

<activity
    android:name=".view.MainActivity"
    android:label="@string/app_name">
    <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <action android:name="android.intent.action.CALL"/>

        <category android:name="android.intent.category.LAUNCHER"/>
        <category android:name="android.intent.category.DEFAULT"/>

        <data
            android:host="my.app.test1"
            android:path="/path/main/home"
            android:port="80"
            android:scheme="app"/>
    </intent-filter>
</activity>

显示调用和隐式调用

一般来说指定了显示调用就不必再定义隐式调用了,否则以显示调用优先。对于隐式调用而言,Intent 必须完全匹配其中一组 InterFilter 中的 action、category、data,才能匹配成功。

action 的匹配规则

系统中定义了一些 action,我们还可以自定义一些 action。action 严格区分大小写,Intent 中必须存在 action ,并且这个 action 在一组 IntentFilter 中出现才算匹配成功,否则匹配失败。只要 Intent 匹配 IntentFilter 中多个 action 中的其中一个即可,但是必须严格匹配所有 category 才算匹配成功。

category 的匹配规则

Intent 中的 action 只要其中一个在 IntentFilter 中出现即可匹配成功。但是,category 要求 Intent 中的 category 必须是 IntentFilter 中的子集,也就是说 Intent 中的所有 category 必须都在 IntentFilter 中出现才算匹配成功。

如果没有指定 category,系统会自动为 Intent 加上默认的 category:android.intent.category.DEFAULT,所以如果没有在 Intent 中指定 category,为了接收隐性 Intent 必须要加一个 android.intent.category.DEFAULT 在 IntentFilter 中。

data 的匹配规则

data 的匹配规则和 action 类似。如果未指定 scheme 或 host,那么整个 URI 无效,必须两者都指定,后面的 port、path 才有效。

上一篇 下一篇

猜你喜欢

热点阅读