一、Messenger通訊
1、單應用程序多進程單向通信
步驟:
1》創(chuàng)建Service類,并在注冊文件中注冊,并開啟新進程,如:
<Service android:name=".MyService" ?android:process=":remote"/>
2》在Service類里面,新建一個繼承于Handler的內(nèi)部類(ServieceHandler),ServiceHandler里面實現(xiàn)了handlerMessage()方法,里面處理客戶端傳過來的數(shù)據(jù);
3》在Service類里面,新創(chuàng)建一個Messenger對象,并把SerViceHandler的對象當作參數(shù)傳進去,如:
//被客戶端接收的Messenger對象
final Messenger messenger =new Messenger(new SerViceHandler());
4》通過Service類里面的onBind()方法給客戶端返回IBinder實例,如:
@Override
public IBinder onBind(Intent intent) {
? ? ? return messenger.getBinder();??
? }
5》Activity實現(xiàn)(客戶端),創(chuàng)建ServiceConnection實例,重寫了onServiceConnected()和onServiceDisconnected()兩個方法,把onServiceConnected()方法回調(diào)的IBinder實例強轉(zhuǎn)成Messenger實例,此時,這個Messenger實例就可以充當Handler,可以給Service發(fā)送Message消息了。
2、單應用程序多進程雙向通信
1》創(chuàng)建Service類,并在注冊文件中注冊,并開啟新進程,如:
2》在Service類里面,新建一個繼承于Handler的內(nèi)部類(ServieceHandler),ServiceHandler里面實現(xiàn)了handlerMessage()方法,在該方法里面接收客戶端傳過來的參數(shù),并接收客戶端傳過來的clientMessenger實例(clientMessenger = msg.replyTo()),該實例也相當于Handler,把服務(wù)端處理數(shù)據(jù),發(fā)送回去給客戶端;
3》在Service類里面,新創(chuàng)建一個Messenger對象,并把SerViceHandler的對象當作參數(shù)傳進去,如:
//被客戶端接收的Messenger對象
final Messenger messenger =new Messenger(new SerViceHandler());
4》通過Service類里面的onBind()方法給客戶端返回IBinder實例,如:
@Override
public IBinder onBind(Intent intent) {
return messenger.getBinder();
}
5》Activity實現(xiàn)(客戶端),創(chuàng)建ServiceConnection實例,重寫了onServiceConnected()和onServiceDisconnected()兩個方法,把onServiceConnected()方法回調(diào)的IBinder實例強轉(zhuǎn)成Messenger實例,此時,這個Messenger實例就可以充當Handler,把客戶端的clientMessenger當作參數(shù)傳給service和Message消息一起發(fā)送給Service。