Android中的多进程

通过给四大组件指定android:process属性,我们便可以轻易的开启多线程。但是会带来一些影响。

正常情况下在Android中多进程是指一个应用中存在多个进程的情况。

Android系统会为每个应用分配一个唯一的UID,UID相同的应用才能共享数据。两个应用通过ShareUID跑在同一个进程中是有要求的,需要这两个应用具有相同的ShareUID并且签名相同才可以。在这种情况下他们可以互相访问对方的私有数据。

Android为每个应用分配了一个独立的虚拟机,或者说为每个进程都分配一个独立的虚拟机,不同的虚拟机在内存分配上有不同的地址空间,就会导致在不同的虚拟机中访问同一个类的对象会产生多份副本。
在一个进程中修改值只会影响当前进程,对其他进程不会造成影响,比如在活动1中修改了一个静态成员变量000,在活动2中,静态成员变量000却没有发生改变。

所有运行在不同进程中的四大组件,只要他们之间需要通过内存来共享数据,都会共享失败,这也是多进程所带来的主要影响。
使用多进程也会带来其他问题:
(1)静态成员和单列模式完全失效。
(2)线程同步机制完全失效。
:既然都不是一块内存了,那么不管是锁对象还是锁全局类都无法保证线程同步,因为不同进程锁的不是同一个对象。
(3)SharedPreference的可靠性下降。
:SharedPreferences不支持两个进程同时去执行写操作,否则会导致一定几率数据丢失,这是因为SharePreference底层是通过读写XML文件来实现的,并发写显然是可能出问题的。
(4)Application会多次创建。
:当一个组件跑在一个新的进程中的时候,由于系统要在创建新的进程同时分配独立的虚拟机,所以这个过程就是启动一个应用的过程。因此,相当于系统又把这个应用重新启动了一遍,既然重启,那么自然会创建新的Application。这个问题其实可以这么理解,运行在同一个进程中的组件是属于同一个虚拟机和同一个Application的,同理,运行在不同进程中的组件是属于两个虚拟机和Application的。

在多进程模式中,不同进程的组件确实会拥有独立的虚拟机、Application以及内存空间,这会给实际开发带来很多困扰,是尤其需要注意的,或者我们也可以理解成同一个应用间的多进程:它就相当于两个不同的应用采用了SharedUID的模式,这样能够更加直接理解多线程的本质。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值