美文网首页
android IPC进程通讯的总结

android IPC进程通讯的总结

作者: struggling_chen | 来源:发表于2016-08-15 18:35 被阅读38次

一、Messenger通讯

1、单应用程序多进程单向通信

步骤:

1》创建Service类,并在注册文件中注册,并开启新进程,如:

<Service android:name=".MyService"  android:process=":remote"/>

2》在Service类里面,新建一个继承于Handler的内部类(ServieceHandler),ServiceHandler里面实现了handlerMessage()方法,里面处理客户端传过来的数据;

3》在Service类里面,新创建一个Messenger对象,并把SerViceHandler的对象当作参数传进去,如:

//被客户端接收的Messenger对象

final Messenger messenger =new Messenger(new SerViceHandler());

4》通过Service类里面的onBind()方法给客户端返回IBinder实例,如:

@Override

public IBinder onBind(Intent intent) {

      return messenger.getBinder();  

  }

5》Activity实现(客户端),创建ServiceConnection实例,重写了onServiceConnected()和onServiceDisconnected()两个方法,把onServiceConnected()方法回调的IBinder实例强转成Messenger实例,此时,这个Messenger实例就可以充当Handler,可以给Service发送Message消息了。

2、单应用程序多进程双向通信

1》创建Service类,并在注册文件中注册,并开启新进程,如:

2》在Service类里面,新建一个继承于Handler的内部类(ServieceHandler),ServiceHandler里面实现了handlerMessage()方法,在该方法里面接收客户端传过来的参数,并接收客户端传过来的clientMessenger实例(clientMessenger = msg.replyTo()),该实例也相当于Handler,把服务端处理数据,发送回去给客户端;

3》在Service类里面,新创建一个Messenger对象,并把SerViceHandler的对象当作参数传进去,如:

//被客户端接收的Messenger对象

final Messenger messenger =new Messenger(new SerViceHandler());

4》通过Service类里面的onBind()方法给客户端返回IBinder实例,如:

@Override

public IBinder onBind(Intent intent) {

return messenger.getBinder();

}

5》Activity实现(客户端),创建ServiceConnection实例,重写了onServiceConnected()和onServiceDisconnected()两个方法,把onServiceConnected()方法回调的IBinder实例强转成Messenger实例,此时,这个Messenger实例就可以充当Handler,把客户端的clientMessenger当作参数传给service和Message消息一起发送给Service。

相关文章

网友评论

      本文标题:android IPC进程通讯的总结

      本文链接:https://www.haomeiwen.com/subject/ihbusttx.html