一个工程对应一个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的主要内容如下:

 

<activity android:name=".HelloWorldActivity"
          android:label="@string/app_name"
          android:process=":process.main">
         <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
</activity>
<activity android:name="cn.ian.NextPageActivity"
      android:label="@string/nextpage"
      android:process=":process.sub"
      android:icon="@drawable/icon1"
      android:launchMode ="singleInstance">
     <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
</activity>

 

通过上面的方式,为App的各个组件指定process和icon属性,便能够达到类似于一个apk中打包多个程序(模块)的目的。

ps:要特别注意,为Activity指定process属性后,还必须为其指定launchMode为singleInstance,这样才有效。

最新文章

  1. 课堂 表单验证 JavaScript js
  2. Asp.net操作cookie大全
  3. config、make、make install
  4. python实现简单kNN
  5. Cocos2d-JS中的精灵菜单和图片菜单
  6. Android 学习手札(三) 视图(View)
  7. ubuntu下安装xlrd模块,Mysqldb模块
  8. HTML CSS——background的认识(一)
  9. Yellow
  10. MVC、MVP、MVVM 模式对比
  11. 背水一战 Windows 10 (122) - 其它: 通过 Windows.System.Profile 命名空间下的类获取信息, 查找指定类或接口的所在程序集的所有子类和子接口
  12. 基于python的OpenCV图像1
  13. 新建WINDOWS服务C#
  14. Centos6.5搭建Elasticsearch
  15. django之 F&amp;Q 聚合与分组
  16. chart 数据 图表插件
  17. (转)mysql百万级以上查询优化
  18. 2018年湘潭大学程序设计竞赛G又见斐波那契
  19. Python 函数(一)
  20. centos 6.5 安装mplayer

热门文章

  1. [Android Pro] Android中IntentService的原理及使用
  2. MySql_34道经典Sql试题
  3. Java JDBC数据库链接
  4. SQL2005,错误 0xc00470fe 数据流任务 产品级别对于 组件“源 - 2009_txt”(1) 而言不足
  5. 解决百度ueditor支持iframe框架页面的视频播放问题
  6. 【OpenCV】解析OpenCV中copyMakerBorder函数
  7. android 在UI线程之外处理Bitmap - 开发文档翻译
  8. LCS 算法
  9. netdata的安装与使用
  10. 用Bluepages来验证intranetId和Password的有效性