Android中的多进程模式

Android中的多进程模式

采取多进程的使用场景

  • 应用应自身需要需采用多进程
    • 有些模块因特殊原因需运行在单独进程
    • 为了加大一个应用可使用的内存,使用多进程来获取多份内存空间
      • Android对单个应用的最大内存做了限制,早期的为16M,不同设备大小不同
  • 调用系统或第三方平台应用。由于是两个进程,所以必须使用跨进程的方式

开启多进程模式

创建新的进程,在多进程模式中,不同进程的组件会拥有独立的虚拟机,Application以及内存空间。它就相当于两个不同应用采用了sharedUID模式。

方式一

以此方式,进程名为包名:remote。属于当前应用的私有进程,其他应用的组件不可以和它跑在同一个进程中。

android:process=":remote"

方式二

以此方式,进程名为com.ethanco.test.remote。属于全局进程,其他应用通过ShareUID方式可以和它跑在同一进程中。

android:process="com.ethanco.test.remote"

Android系统会为每个应用分配一个唯一的UID,具有相同UID的应用才能共享数据。
在ShareUID和签名都相同的情况下,可以互相访问对方的私有数据。
如果连进程又相同,还可以共享内存数据。

方法三

通过JNI在native层去fork一个新的进程

使用多进程会造成

  • 静态变量和单例模式完全失效
    • Android为每个进程都分配一个独立的虚拟机,不同的虚拟机在内存分配上有不同的地址空间,导致不同的虚拟机访问同一个类的对象会产生多份副本。
  • 线程同步机制完全失效
    • 因为不是同一块内存,那么不管是锁对象还是锁全局类都无法保证线程同步
  • SharedPreferences的可靠性下降
    • SharedPreferences不支持两个进程同时去执行写操作,否则会导致一定几率的数据丢失。
    • SharedPreferences底层是通过读/写XML文件来实现的
  • Application会多次创建
    • 当一个组件跑在一个新的进程中的时候,由于系统要在创建新的进程同时分配独立的虚拟机,所以这个过程其实就是启动一个应用的过程。因此,相当于系统又把这个应用重新启动一遍。

在多进程情况下,防止Application多次创建

可在Application#onCreate()中判断进程名,只有主进程继续执行

@Override
public void onCreate() {
    super.onCreate();
    //多进程,防止除主进程外的初始化
    String processname = RunTimeUtil.getCurProcessName(this);
    if (!"cn.nbhope.threepartprotocol".equals(processname)) return;

    //do something
}

其他

参考 《Android艺术开发探索》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

氦客

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值