【Android課堂】 實現應用的多入口表徵圖

來源:互聯網
上載者:User

2012-11-26分類:Android, 學習課堂, 開發, 隨手執行個體 |
標籤:Action, Activity, Android課堂, 多入口, Category, DEFAULT, Intent, Launcher,MAIN, singleInstance | 評論關閉

    最近仔細複習了一下Intent中的相關知識,發現這一塊的內容用起來說簡單也簡單,但是一深究下去,也有許多好玩的東西。
    本篇中我們就主要來談一下如果實現應用程式的多入口。
    什麼意思呢?
        就是一個應用,安裝後,在“所有應用”裡面出現了多個入口 。
    主要用於什麼情況呢?
        主要用於我們程式多個功能時,為了便於使用者啟動想要的功能, 則可以做成一個應用,多個入口 ,直接在“所有應用”中選擇相應的表徵圖就可以直接引入到程式的相應的功能介面去。


    在正式開始講之前呢,我們需要再複習一下Action 與Category的知識:

        Action主要是指名Intent的一個動作,在隱式請求Intent中,如果沒有Action ,則不能匹配到任何的Activity來執行此Intent.
        Category主要是指定一個Intent 的類別。與Action配合才能更具體是表示一個 Intent的意圖。

    系統也為我們提供了許多的Action與Category。在這裡我們主要是介紹一下我們在本內容中會使用到的Action 與Category,至於其它的,大家可以網上搜尋一下,一大堆。

 
  1. android.intent.action.MAIN
  2. 它主要是決定我們程式的入口。因為我們的應用可能不止一個activity ,
  3. 但是在啟動的時候應該啟動哪個activity呢?就是則它決定的。
  4. android.intent.category.LAUNCHER
  5. 它主是決定是否需要將圖片顯示到Launcher的"所有應用"中去。
  6. android.intent.category.DEFAULT
  7. 預設的一個category .

    我們平時在程式中,對入口的定義,一般是用的android.intent.action.MAIN和android.intent.category.LAUNCHER。這個大家都都應該清楚 。
    但是android.intent.category.DEFAULT又用在何處呢?什麼時候該用android.intent.category.DEFAULT呢?

    我前面的一個文章 Android課堂-Intent匹配,你知多少? 中講到,我們的Intent啟動分為兩種,一種是顯式的,一種是隱式的。
    intent到底發給哪個activity,需要進行三個匹配,一個是action,一個是category,一個是data。
    理論上來說,如果intent不指定category,那麼無論intent filter的內容是什麼都應該是匹配的。但是,如果是我們在代碼中使用的是隱式的Intent,android預設給加上一個CATEGORY_DEFAULT,這樣的話如果intent filter中沒有android.intent.category.DEFAULT這個category的話,匹配測試就會失敗。所以,如果你的 activity支援接收隱式intent啟動的話就一定要在intent filter中加入android.intent.category.DEFAULT。
    當然,有個例外,就是要程式有入口activity中他們已經定義了android.intent.action.MAIN和android.intent.category.DEFAULT,我們可以省略掉android.intent.category.DEFAULT,當然,你加上也不會有錯。

    講了action和category,我們再來看看我們的主要任務:如果實現一個應用多個入口 ?
    經過上面的講解,可能你也已經猜到了,使用android.intent.action.MAIN和android.intent.category.DEFAULT。

    我們下面來看一看代碼:

 
  1. <activity android:name=".MainActivity"
  2. android:label="Test_Main">
  3. <intent-filter>
  4. <action android:name="android.intent.action.MAIN" />
  5. <action android:name="com.krislq.broadcast.First" />
  6. <category android:name="android.intent.category.LAUNCHER" />
  7. </intent-filter>
  8. </activity>
  9. <activity android:name=".SecondActivity"
  10. android:label="Test_Second">
  11. <intent-filter>
  12. <action android:name="android.intent.action.MAIN" />
  13. <action android:name="com.krislq.broadcast.Second" />
  14. <category android:name="android.intent.category.LAUNCHER" />
  15. </intent-filter>
  16. </activity>

    我們再運行一下看看效果?

    但是細心的人多測試幾次就會發現,當我們在Test_Main介面中,點擊Home鍵切換到後台,點擊Test_Second的表徵圖時,就會進入Test_Main.
    為什麼會這樣呢?
        因為雖然是兩個入口,但是他們都是屬於同一個應用的,你按Home鍵切換到後台,程式還在運行,這時再點擊Test_Second,系統會顯示上次程式的停留介面,而並不會去啟動一個新的應用。

    如何讓他們兩個入口相互不影響呢?

        我們可以修改Activity的LaunchMode為singleInstance。

 
  1. <activity android:name=".MainActivity"
  2. android:label="Test_Main"
  3. android:launchMode="singleInstance">
  4. <intent-filter>
  5. <action android:name="android.intent.action.MAIN" />
  6. <action android:name="com.krislq.broadcast.First" />
  7. <category android:name="android.intent.category.LAUNCHER" />
  8. </intent-filter>
  9. </activity>
  10. <activity android:name=".SecondActivity"
  11. android:label="Test_Second"
  12. android:launchMode="singleInstance">
  13. <intent-filter>
  14. <action android:name="android.intent.action.MAIN" />
  15. <action android:name="com.krislq.broadcast.Second" />
  16. <category android:name="android.intent.category.LAUNCHER" />
  17. </intent-filter>
  18. </activity>

    但是我們修改成singleInstance後,我們的兩個activity就不能初始化執行個體出來了哦。
    所以大家在使用的時候,一定要衡量每種辦法的權重。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.