实现两个数相加的功能
服务端:
public class MessageService extends Service { private static final int MSG_SUM = 0x110; public MessageService() { } @Override public IBinder onBind(Intent intent) { // TODO: Return the communication channel to the service. return messenger.getBinder(); } private Messenger messenger = new Messenger(new Handler(){ @Override public void handleMessage(Message msg) { Message message = Message.obtain(msg); switch (msg.what){ case MSG_SUM: message.what = MSG_SUM; try { Thread.sleep(2000); message.arg2 = msg.arg1 + msg.arg2; msg.replyTo.send(message); //给客户端传递消息 }catch (Exception e){ e.printStackTrace(); } break; } super.handleMessage(msg); } }); }
<service android:name=".MessageService" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="com.example.administrator.ipcdemo.messenger"/> <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </service>
客户端:
private Messenger mService; private Messenger messenger = new Messenger(new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case MSG_SUM: Toast.makeText(MainActivity.this,msg.arg2+"",Toast.LENGTH_LONG).show(); break; } super.handleMessage(msg); } }); private ServiceConnection conn = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { Log.i("wanlijun","onServiceConnected"); mService = new Messenger(service); } @Override public void onServiceDisconnected(ComponentName name) { Log.i("wanlijun","onServiceDisconnected"); mService = null; } };
绑定服务:
Intent intent = new Intent(); intent.setAction("com.example.administrator.ipcdemo.messenger"); intent.setPackage("com.example.administrator.ipcdemo"); bindService(intent,conn,BIND_AUTO_CREATE);
相加:
try { Message msg = Message.obtain(null,MSG_SUM,1,1); msg.replyTo = messenger; mService.send(msg); //给服务端发消息 }catch (RemoteException e){ e.printStackTrace(); }其本质还是通过编写AIDL文件和利用Binder通讯,只是进行了封装