一、要弄清楚這個問題,首先須要弄明白什麼是implicit(隱藏) intent什麼是explicit(明確) intent。android
Explicit Intent明確的指定了要啓動的Acitivity ,好比如下Java代碼:
Intent intent= new Intent(this, B.class) ide
Implicit Intent沒有明確的指定要啓動哪一個Activity ,而是經過設置一些Intent Filter來讓系統去篩選合適的Acitivity去啓動。測試
二、intent到底發給哪一個activity,須要進行三個匹配,一個是action,一個是category,一個是data。this
理論上來講,若是intent不指定category,那麼不管intent filter的內容是什麼都應該是匹配的。可是,若是是implicit intent,android默認給加上一個CATEGORY_DEFAULT,這樣的話若是intent filter中沒有android.intent.category.DEFAULT這個category的話,匹配測試就會失敗。因此,若是你的 activity支持接收implicit intent的話就必定要在intent filter中加入android.intent.category.DEFAULT。spa
例外狀況是:android.intent.category.MAIN和android.intent.category.LAUNCHER的filter中沒有必要加入android.intent.category.DEFAULT,固然加入也沒有問題。
咱們定義的activity若是接受implicit intent的話,intent filer就必定要加上android.intent.category.DEFAULT這個category。xml
android.intent.category.LAUNCHER 具體有什麼做用?我在xml裏面加和不加 感受沒什麼區別啊。誰能解釋下!ci
<activity android:name="APAct">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="URLAct">
<intent-filter>
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>it
一個應用程序能夠有多個Activity,每一個Activity是同級別的,那麼在啓動程序時,最早啓動哪一個Activity呢?有些程序可能需 要顯示在程序列表裏,有些不須要。怎麼定義呢?android.intent.action.MAIN決定應用程序最早啓動的Activity android.intent.category.LAUNCHER決定應用程序是否顯示在程序列表裏io
由於你的程序可能有不少個activity
只要xml配置文件中有這麼一個intent-filter,並且裏面有這個launcher,那麼這個activity就是點擊程序時最早運行的那個activity。
如今你只有一個activity,那麼加不加就沒有關係了。class
用於模擬器啓動時設置爲默認打開爲的activity