IPC通信机制

android IPC简介

     IPC是Inter-Process Communication的缩写,含义就是进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程。

IPC的实现方式

 1.使用Bundle   ----> 用于android四大组件间的进程间通信
android的四大组件都可使用Bundle传递数据  所以如果要实现四大组件间的进程间通信 完全可以使用Bundle来实现 简单方便  

2.使用文件共享  ---->用于单线程读写
这种方式在单线程读写的时候比较好用 如果有多个线程并发读写的话需要限制线程的同步读写  
另外 SharePreference是个特例  它底层基于xml实现  但是系统对它的读写会基于缓存,也就是说再多进程模式下就变得不那么可靠了,有很大几率丢失数据


3.使用Messenger   ---->用于可存放在message中的数据的传递
使用这个方式可以在不同进程间传递message对象  这是一种轻量级的IPC方案  当传递的对象可以放入message中时  可以考虑用这种方式  但是msg.object最好不要放
因为不一定可以序列化  
使用它的步骤如下:
假设这样一个需求  需要在客户端A发送消息给服务端B接受  然后服务端B再回复给客户端A 


4.AIDL android 接口定义语言  ---->主要用于调用远程服务的方法的情况 还可以注册接口 
使用方法很简单  
在服务端定义aidl文件 自动生成java文件  然后在service中实现这个aidl  在onbind中返回这个对象  
在客户端把服务端的aidl文件完全复制过来  包名必须完全一致   在onServiceConnected方法 中 把  Ibinder对象 用asInterface方法转化成 aidl对象
然后调用方法即可  

5.ContentProvider方式  实现对另一个应用进程开放provider数据的查询
此方法使用起来也比较简单  底层是对Binder的封装 使之可以实现进程间通信  使用方法如下  
1. 在需要共享数据的应用进程中建立一个ContentProvider类 重写它的CRUD 和getType方法  在这几个方法中调用对本应用进程数据的调用 
  然后在AndroidMinifest.xml文件中声明provider  
  

[java] view plain copy
  1. <provider   
  2.             android:authorities="com.yangsheng.book"  //这个是用来标识provider的唯一标识  路径uri也是这个  
  3.             android:name=".BookProdiver"  
  4.             android:process=":remote_provider"/>   //此句为了创建多进程  正常不需要使用  



2. 在需要获取共享数据的应用进程中调用getContentResolver().crud方法  即可实现数据的查询  

6.Socket方法实现Ipc   这种方式也可以实现 但是不常用  
需要权限  
<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
这种方式需要一个服务端socket 和一个客户端socket  建立连接后 通过流循环获取消息即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值