Android开发艺术探索笔记(4)- 多进程模式

本文深入探讨了Android中如何通过配置组件的android:process属性来实现多进程,并详细解析了私有进程与共享进程的区别,以及多进程环境下带来的挑战,如静态变量和单例失效、线程同步失效等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在理解IPC(Inner-Process Communication,进程间通信)机制之前,我们要先知道Android多进程模式。我们知道每个程序都是一个进程(上一节我们说过的呀),但是怎么在一个Android程序开启多进程模式呢?书中说了,只有一个办法,就是给四大组件(Activity,Service,Receiver,ContentProvider)在AndroidMenifest文件定义的时候,指定android:process属性,这个意思是给组件指定运行的进程名。

指定android:process属性也有两种方式:
(1)android:process=”:remote”
(2)android:process=”com.johan.project2.remote”

这两种指定方式还是差别的。假若我现在的程序的进程名是com.johan.project1,那么第一种方式指定的进程名是”com.johan.project1:remote”,第二种方式的进程名就是指定的属性值,”com.johan.project2.remote”。还有一个区别就是使用第一种方式,”com.johan.project1:remote”进程是”com.johan.project1”进程是私有进程,别的进程是跑不进”com.johan.project1:remote”里面的。而用第二种方式是允许别人进程跑进”com.johan.project2.remote”进程的。

上面说到,跑到同一个进程是怎么回事?作者说了,不仅要定义同一个ShareUID,还要签名一样才能跑在同一进程。跑在同一进程有什么好处,同享内存数据呗。

之前面试的时候被问过,签名有什么用??简单来说,签名是开发者的身份标识,可以让应用程序与开发者建立信任关系。没有签名的Android应用程序是无法安装到手机的。其实签名还有几个好处:
(1)防止恶意攻击。相同APK,但是如果签名不同,新版本是不能安装到旧版本的手机上的。这也有利于程序的升级。
(2)有利于模块化开发。刚才也说了,相同签名和相同ShareUID可以跑在同一个进程中。开发者可以将程序分模块开发,用户需要哪个模块下载哪个模块。

再回到多进程模式。说说我们第一种方法启动多进程,既然是私有进程,那可不可以同享内存呢??答案显然易见,当然是不可以的。因为每个进程都有自己独立的地址空间。书中举了一个单例的栗子,定义了一个UserManager单例,然后在Activity(A属于进程1)修改单例的内容,再然后让Activity(B属于进程2)访问Activity(A)修改的内容,显然是初始值。

书中还说了多进程在同一个应用会造成几个问题:
(1)静态变量和单例失效。(之前解释过了)
(2)线程同步失效。(因为不在同一块内存,当然失效)
(3)SharePreference的可靠性降低。
SharePreference读写数据,实际上读写xml文件。如果多进程同时读写数据,会造成一定几率的失败。
(4)多次创建Application。(这个和之前的道理是一样的)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值