歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android 一個apk多個ICON執行入口

Android 一個apk多個ICON執行入口

日期:2017/3/1 10:30:24   编辑:Linux編程

一個工程對應一個AndroidManifest.xml文件,這個文件中包含有該項目的一些設置,如權限、SDk版Activity、Service信息等。一般而言,這個文件中會有且僅有一個application節點,這個節點表示這是一個應用程序,不管它下面還有多少子節點如Activity、Service等等。形象的說,就是這個項目生成的apk安裝到Android設備後,應用程序列表中會出現一個ICON,這個ICON就是這個程序的執行入口了。

但是,某些情況下,我們需要為我們的apk設置多個執行入口,也就是安裝後在應用程序列表中出現多個ICON圖標,各個ICON是APP不同模塊的入口點,並且各個模塊運行在不同的進程中。

可能這種需求很少見,但還是有一個現實的例子:系統中的聯系人和電話這兩個程序。表面看來這是兩個獨立的應用程序,但實際上它們只是一個應用程序的兩個執行入口而已,點擊聯系人圖標就會進入聯系人界面,點擊電話圖標就會進入撥號界面,這都是通過設置該項目下Activity的屬性來實現的。

Activity有一個重要的屬性process,這個屬性是指定Activity運行時所在的進程。沒有指定此屬性的話,所有程序組件運行在應用程序默認的進程中,這個進程名跟應用程序的包名一致。中所有組建元素的process屬性能夠為該組件設定一個新的默認值。但是任何組件都可以覆蓋這個默認值,允許你將你的程序放在多進程中運行。如果這個屬性被分配的名字以:開頭, 當這個activity運行時, 一個新的專屬於這個程序的進程將會被創建。

以下面的代碼為例,項目中有兩個Activity,其中一個采用默認屬性,另一個為其指定process屬性以及新的ICON,這樣該項目安裝到設備上之後可以發現多了兩個應用程序圖標,一個是應用程序默認的圖標,點擊後進入HelloWorldActivity;另一個是手動指定的ICON,點擊後進入NextPageActivity。這時使用adb shell查看進程可以發現,兩個Activity是運行在不同的進程中的。

AndroidManifest.xml的主要內容如下:

  1. <activity android:name=".HelloWorldActivity"
  2. android:label="@string/app_name"
  3. android:process=":process.main">
  4. <intent-filter>
  5. <action android:name="android.intent.action.MAIN" />
  6. <category android:name="android.intent.category.LAUNCHER" />
  7. </intent-filter>
  8. </activity>
  9. <activity android:name="cn.ian.NextPageActivity"
  10. android:label="@string/nextpage"
  11. android:process=":process.sub"
  12. android:icon="@drawable/icon1"
  13. android:launchMode ="singleInstance">
  14. <intent-filter>
  15. <action android:name="android.intent.action.MAIN" />
  16. <category android:name="android.intent.category.LAUNCHER" />
  17. </intent-filter>
  18. </activity>

通過上面的方式,為App的各個組件指定process和icon屬性,便能夠達到類似於一個apk中打包多個程序(模塊)的目的。

ps:要特別注意,為Activity指定process屬性後,還必須為其指定launchMode為singleInstance,這樣才有效。

Copyright © Linux教程網 All Rights Reserved