Android 多进程

一般情况下,一个apk启动后只会运行在一个进程中,其进程名为AndroidManifest.xml文件中指定的应用包名,所有的基本组件都会在这个进程中运行。但是如果需要将某些组件(如Service、Activity等)运行在单独的进程中,就需要用到Android:process属性了。我们可以为Android的基础组件指定process属性来指定它们运行在指定进程中。

实现方法

都是在AndroidManifest.xml中设置process实现,也有两种形式

  • 第一种形式如 android:process=":remote",以冒号开头,冒号后面的字符串原则上是可以随意指定的。如果我们的包名为“com.example.processtest”,则实际的进程名为“com.example.processtest:remote”。这种设置形式表示该进程为当前应用的私有进程,其他应用的组件不可以和它跑在同一个进程中。
  • 第二种情况如android:process="com.example.processtest.remote",以小写字母开头,表示运行在一个以这个名字命名的全局进程中,其他应用通过设置相同的ShareUID可以和它跑在同一个进程。
<?xml version="1.0" encoding="utf-8"?>  
<manifest xmlns:android="http://schemas.android.com/apk/res/android"  
package="com.example.processtest"  
android:versionCode="1"  
android:versionName="1.0" >  

<uses-sdk  
    android:minSdkVersion="8"  
    android:targetSdkVersion="19" />  

<application  
    android:name="com.example.processtest.MyApplication"  
    android:icon="@drawable/ic_launcher"  
    android:label="@string/app_name">  
    <activity  
        android:name=".ProcessTestActivity"  
        android:label="@string/app_name" >  
        <intent-filter>  
            <action android:name="android.intent.action.MAIN" />  

            <category android:name="android.intent.category.LAUNCHER" />  
        </intent-filter>  
    </activity>  
      
    <service  
        android:name=".ProcessTestService"  
        android:process=":remote">  
    </service>  
</application>  

</manifest>

潜在问题

开启多进程很简单,但是这样却存在很多问题

  • 多进程间内存不可见
  • Application被多次执行
  • 静态成员的失效
  • 文件共享问题
  • 断电调试问题

总结

其实,Android实现应用内多进程并不是简单的设置属性process就可以了,而是会产生很多特殊的问题。像前面提到的,Android启动多进程模式后,不仅静态变量会失效,而且类似的如同步锁机制、单例模式也会存在同样的问题。这就需要我们在使用的时候多加注意。而且设置多进程之后,各个进程间就无法直接相互访问数据,只能通过AIDL等进程间通信方式来交换数据。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Jianwei's blog 首页 分类 关于 归档 标签 巧用Android多进程,微信,微博等主流App都在用...
    justCode_阅读 11,175评论 1 23
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,149评论 25 709
  • 1.为什么要使用多进程? 相信很多同学在实际开发中,基本都不会去给app划分进程,而且,在Android中使用多进...
    一分耕耘一分收获阅读 8,098评论 1 5
  • 你的孩子是不是爱乱涂乱画,你的孩子是不是喜欢在外打闹,但是你又怕有什么危险……总之,我们对孩子那是操碎了心,想找个...
    喵梓阅读 1,911评论 0 0
  • 1.同事说我说话很急躁,让我有点惊讶,因为我觉得自己说得比较平静。下次注意一下说话的语速放慢一半,声音放大一倍,表...
    幻影旅团阅读 1,475评论 0 0