Android中的进程间通讯

一、简介

进程间通讯(InterProcess Communication)

指在不同进程之间传播或交换信息,Android是基于Linux 系统的,在Linux 中进程间是不能直接通讯的,IPC就是为了解决这一问题

每个操作系统都有相应的IPC机制,Android中一个进程会对应一个虚拟机实例,不同的虚拟机在内存分配上有不同的地址空间

只有在多进程的环境下才会使用IPC进行通讯

二、使用场景

  • 多模块应用:由于Android应用受到系统的最大内存限制,为了获得更多的内存空间将不同的模块放在不同的线程中,此时需要用到跨进程通信
  • 其它应用:获取其它应用里的数据,比如:获取通讯录和短信

三、实现多进程

Android默认是运行在包名的进程中,可以通过修改AndroidManifest文件,在 application 标签下添加 android:process 属性可以修改Android默认的进程名字

给四大组件(Activity Service Broadcast ContentProvider)设置android:process属性来实现多进程

四、造成的问题

  • 多进程会造成Application的多次创建:当一个组件需要运行在新的进程中时,实际的创建过程就相当于又重新启动了一次应用,就会创建Application。而运行在不同进程中的组件,不仅属于不同的虚拟机,而且其Application也是不同的。
  • 多进程会导致静态成员和单例完全无效:由于不同进程都被分配了独立且不同的虚拟机,其在内存分配上有这不同的地址空间。这就会导致在着一个类的多个副本,各自修改互不影响。
  • 多进程模式下,线程的同步机制也会失效:因为不同的进程,其线程不所属同一内存,那么无论是对象锁还是类锁,锁本身都不是同一个了。
  • 多进程模式下SharedPreferences风险会增大:SharedPreferences底层是通过文件读写实现的,并发操作可能会造成问题。

在不同进程中的组件,如果使用内存来通讯,都会存在隐患或者直接失败。这就是多进程带来的最主要的影响。

五、Android中的跨进程通讯(IPC)

利用Bundle

        在Android开发中,

Activity,Service,Receiver 都支持在 Intent 中传递 Bundle 数据,而 Bundle实现了 Parcelable 接口,以键值对的方式保存数据,可以在不同的进程间进行传输。 可以将其视为一个容器,其支持基本数据类型(String、int、boolean、byte、float、long、do

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值