Android多进程模式

本文内容基于《Android开发艺术探索》,强烈推荐,值得一看。

在Android中说多进程一般是指一个应用中存在多个进程,在Android中使用多进程只有一种方法:给四大组件在AndroidMenifest中指定android:process属性,除此之外别无他法(通过JNI在native层去fork一个进程也可以,不常用,不做介绍),所以我们不能给一个线程或者实体类指定其运行时所在的进程。

1.开启多进程

<activity
    android:name="com.zhong.ActivityA" />
<activity
    android:name="com.zhong.ActivityB"
    android:process=":remote" />
<activity
    android:name="com.zhong.ActivityC"
    android:process="com.zhong.remote" />
1). 上面三个Activity中:
  • ActivityA:未指明android:process属性,它允许在默认进程中,进程名为包名,即com.zhong;
  • ActivityB:设置android:process=":remote",系统会为它创建一个单独的进程,进程名为包名+:remote,即com.zhong:remote,相当于android:process="com.zhong:remote";
  • ActivityC:设置android:process="com.zhong.remote",系统会为它创建一个单独的进程,进程名为process设置的值,即com.zhong.remote
2). ":remote"和"com.zhong.remote"区别

":remote"中":"是指要在当前进程名前面附近包名的简写,"com.zhong.remote"是一种完整的写法,进程名不会再附加包名;其次,":"是属于当前应用的私有进程,"com.zhong.remote"是全局进程,全局进程其他应用可以通过ShareUID方式跑在同一进程中(前提是两个应用ShareUID相同并且签名相同),这两个应用可以相互访问对方私有数据。

2.运行机制

由于Android为每个进程分配独立的虚拟机,所以不同虚拟机访问同一个类会产生不同的副本,因此运行在不同进程中的组件无法通过内存共享数据,所以一个应用使用多进程会出现一下几个问题:

  • 静态成员和单例模式完全失效(不是同一块内存,会产生不同的副本)
  • 线程同步机制完全失效(不是同一块内存,所以对象也不是同一个,因此类锁、对象锁也不是同一个,不能保证线程同步)
  • SharedPreferences 可靠性下降(SharedPreferences不支持多个进程同时写,会有一定的几率丢失数据)
  • Application 多次创建(Android为每个进程分配独立的虚拟机,这个过程其实就是启动一个应用,所以Application会被创建多次)

小结: Android中使用多进程一般是来分担主进程的内存压力,应用越做越大,需要的内存也越来越多,讲一些独立的组件放在不同的进程中,这样可以减轻主进程的内存负担;还有就是启动一个Service,做一些守护或者耗时的操作。
本来想写一下Binder机制的,但现在自己还没完全搞懂,以后补上下面几篇文章会写一下IPC方式:Messenger、AIDL、ContentProvider以及Binder连接池的使用,至于文件、Socket我感觉不适很常用就不再做说明了

本人技术有限,欢迎指正,谢谢!

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,337评论 25 708
  • PS:这里不讨论两个应用之间的多进程情况。(喷子勿扰) PS:这里不讨论两个应用之间的多进程情况。(喷子勿扰) P...
    黎明前见彩虹阅读 391评论 0 0
  • afinalAfinal是一个android的ioc,orm框架 https://github.com/yangf...
    passiontim阅读 15,567评论 2 45
  • 司芬克斯不过是狮身人面的结合体,却已然超越了人们对于正常的定义。可是我呀,可比两块不同形状石块拼接起来的石头古怪多...
    笨NANA阅读 158评论 0 0
  • 2014年10月9日 23:06浏览(132) 按常规,今晚是门店每月一算账的时间。人走之前,必须先把母亲的晚餐安...
    镇南方良金阅读 154评论 0 1