服务端代码
Handler是系统对AIDL的轻量级封装
利用Handler以及Messager
实现跨进程服务端与客户端通信
public class MessagerService extends Service{
private static class MessagerHandler extends Handler{
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case 1:
msg.getData().getString("msg");
Messenger clien = msg.replyTo;
Message msgs = Message.obtain(null,2);
Bundle b = new Bundle();
b.putString("reply","roger that");
msgs.setData(b);
try {
clien.send(msgs);
} catch (RemoteException e) {
e.printStackTrace();
}
break;
}
super.handleMessage(msg);
} }
private Messenger messagerHandler = new Messenger(new MessagerHandler());
@Override
public IBinder onBind(Intent intent) {
return messagerHandler.getBinder();
}}
客户端代码
public class MessageActivity extends Activity{
private Messenger mService;
private Messenger mGerReply =new Messenger(new ReplyMessager());
private ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName componentName, IBinder service) {
mService = new Messenger(service);
Message msg = Message.obtain(null,1);
Bundle b = new Bundle();
b.putString("2","send");
msg.setData(b);
msg.replyTo = mGerReply;
try {
mService.send(msg);
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void onServiceDisconnected(ComponentName componentName) {
} };
private static class ReplyMessager extends Handler{
@Override
public void handleMessage(Message msg) {
switch (msg.what){
case 2:
msg.getData().getString("reply");
break;
}
super.handleMessage(msg);
} }
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = new Intent(this, MessagerService.class); bindService(intent,mServiceConnection, Context.BIND_AUTO_CREATE);
}
@Override
protected void onDestroy() {
unbindService(mServiceConnection);
super.onDestroy(); }
网友评论