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