一、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。