Activity啓動方式的總結(4)-Activity隱式啓動時候IntentFilter的匹配規則

Activity隱式啓動時候IntentFilter的匹配規則

顯式 Intent

即在構造Intent對象時就指定接收者,它一般用在知道目標組件名稱的前提下,一般是在相同的應用程序內部實現的,如下:

Intent intent = new Intent(MainActivit.this, NewActivity.class);
startActivity(intent );  

隱式 Intent

即Intent的發送者在構造Intent對象時,並不知道也不關心接收者是誰,有利於降低發送者和接收者之間的耦合,它一般用在沒有明確指出目標組件名稱的前提下,一般是用於在不同應用程序之間,如下:

Intent intent = new Intent();
intent.setAction("com.wooyun.test");
startActivity(intent);

Intent Filter匹配規則

action 和 data 都是寫的能和filter匹配一個即可

category 只要寫的 都要能在filter中找到

Intent中category可以沒有category,
因爲Intent隱式啓動的時候默認會追加一個android.intent.category.DEFAULT,
所以這也就要求intent-filiter中必須有android.intent.category.DEFAULT

至於 category android:name=”android.intent.category.LAUNCHE”

<intent-filter>
    <action android:name="android.intent.action.MAIN" /> 決定應用程序最先啓動的Activity

    <category android:name="android.intent.category.LAUNCHER" />決定應用程序是否顯示在程序列表裏
</intent-filter>

這二者共同出現,標明該Activity是一個入口Activity,並且會出現在系統應用列表中,二者缺一不可。

intent-filter匹配優先級

首先查看Intent的過濾器(intent-filter),按照以下優先關係查找:action->data->category

參考:http://blog.csdn.net/eyishion/article/details/51113094
http://blog.csdn.net/mynameishuangshuai/article/details/51673273

發佈了68 篇原創文章 · 獲贊 5 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章