您的位置:首页 > 移动开发 > Android开发

android中的多进程模式(IPC)

2016-05-05 18:55 267 查看
1,可能遇到的多进程情况

①应用由于某些原因需要通过多进程来实现。

比如应用所需的内存太小,多进程可以获得更大的内存空间。(android对单个应用的大小做了限制,不同的手机限制的大小不一样。)

如果应用有些模块必须要单独运行在一个进程中。

②当前应用需要向其他应用请求数据,则必须跨进程来获取数据。

2,怎么开启多进程模式

四大组件,都可以通过设置”android:process”属性来开启多进程模式。

3,android:process

android:process=":romote"
android:process="asule.hope.romote"


如果没有为四大组件指定android:process值,那么它是运行在默认的进程中,而默认的进程的名字是应用的包名。

上面列举了android:process的两种写法。

前面那个以”:”开头的那个进程属于私有进程,它的全名还要附加上包名。后面的则是以完整的名字来命名,该进程称为全局进程

其中私有进程,其他应用的组件不可以和它在一个进程里运行。

而全局进程,其他应用可以通过共享UID的方式和它在一个进程中运行。

UID,在windows中UID表示是用户的id,它的作用?比如什么软件我们有权限,什么操作我们可以做等。而在android中,由于是单用户系统,UID表示的是应用的id。每个应用,系统都为其分配了不同的id。

共享UID的意思是两个应用使用一样的id。通过共享UID在一个进程运行还有一个前提是应用的签名要一致。满足这两个条件,多个应用可以在同一个进程中运行。这种情况下,数据共享便更不是问题。

4,多进程模式带来的问题

多进程的出现造成的问题:

①静态变量和单例模式

某个类中的静态变量,在A进程中被修改,被赋值。而在B进程中继续使用该值时,发现依旧是默认值。不同的进程,会运行在独立的不同的虚拟机中,它们访问类时,都会创建对象的副本。

②线程同步

线程同步要求的是多个进程使用同一个锁,要么是同一个对象,要么是同一个类。

而多进程,线程同步时,必然就不会是同一个锁。

③SharePreference

每一个进程的SharePreference都是一个单独的实例,多个进程不能共享SharePreference的数据。可以设置它的MODE为Context.MODE_MULTI_PROCESS,来实现多进程的SharePreference的数据共享,但是多进程并发的执行读写操作,可能会导致一些BUG。

④Application

运行在不同进程的组件,拥有独立的虚拟机,Application,内存空间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: