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

來源:互聯網
上載者:User

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


答:

    一個應用程式可以有多個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的主入口

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.