android.intent.action.MAIN與android.intent.category

<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>

  1.   

答:

    一個應用程序可以有多個Activity,每個Activity是同級別的,那麼在啓動程序時,最先啓動哪個Activity呢?有些程序可能需要顯示在 程序列表裏,有些不需要。怎麼定義呢?android.intent.action.MAIN決定應用程序最先啓動的Activity ,是程序的入口android.intent.category.LAUNCHER決定應用程序是否顯示在程序列表裏.

    因爲你的程序可能有很多個activity只要xml配置文件中有這麼一個intent-filter,而且裏面有這個launcher,那麼這個activity就是點擊程序時最先運行的那個activity。
    現在你只有一個activity,那麼加不加就沒有關係了。用於模擬器啓動時設置爲默認打開爲的activity

 

另注:

    所謂Launcher,是指管理桌面的程序.Lanucher列表是指在桌面中顯示的應用的列表.

 

但是,我做了下檢驗,發現必須在  

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

同時在的時候,該Acticity才能顯示在程序列表裏,WHY?

 

 


當我新建個AndroidProject時,只有一個HActivity,在Manifest中去掉<action>,得:

 <activity android:name=".HActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
 </activity>

 或者,去掉<category>時,

此時運行時,在控制檯都發現,

 

 紅字說明:本程序找不到可運行的Activity,即是找不到程序的入口,因此雖然 程序Install成功,且有LAUNCHER的Category,但是還是加載不了該activity,也無法在程序列表中顯示程序圖標(有圖標,就說 明點擊該圖標就能運行該程序,即是有程序入口,程序可執行)。同理,在最上面的情況,由於URLAct這個Activity沒有入口,所以其不能單獨被執 行,其圖標不能在程序列表中顯示。

 


 

如果有多個同級的Activity都有過濾器

<intent-filter>

 <action android:name="android.intent.action.MAIN" />

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

</intent-filter>

則 只有最前面的Activity的<action .....main>有效,啓動該程序時,執行的是該Activity。且在程序列表中有多個圖標,這些Activity都在程序列表中顯示,該 Application有多個入口,執行不同的Activity,但是整個程序的主入口(整個程序最先運行的那個activity)只有最先定義的那個 Activity。


當 改變作爲主入口的那個<activity>裏的android:label屬性的值()使其與application 的android:label值不同,在程序列表中顯示的是<activity>中的label值。同理當<activity> 裏android:icon的值與<application>值不同時,程序列表裏顯示的是該activity的圖標。也就是說 程序列表的顯示的是activity,而不是application.(個人理解,急待高人點撥) 不然在同一個application 中有多個launcher的activity時,在程序列表中將所有launcher的activity都顯示出來。只不過最先定義的那個activity爲整個application的主入口

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章