android AIDL绑定服务使用

来源:互联网 发布:linux root 编辑:程序博客网 时间:2024/05/22 06:30

最近做了一个AIDL 绑定服务,一般的流程就不用讲了,网上很多例子,

其中另加的是绑定服务的时候传入一个AIDL接口到Service,Service通过该接口传入数据到Activity,再通过Handler更新UI;

在activity中实例化一个mHandler类

private Handler mHandler = new Handler(){@Overridepublic void handleMessage(Message message) {int type = message.what;String msg = message.obj.toString();System.out.println("Type=  " + type);System.out.println("msg =  " + msg );
}
再在activity中重写AIDL

private IClientCallback mClientCallback = new IClientCallback.Stub() {@Overridepublic void onReceiverMessage(int type, String msg)throws RemoteException {Message message = new Message();message.what = type;message.obj =msg;mHandler.sendMessage(message);}
activity中绑定服务,并传入mClientCallback

this.bindService( intent , this.mConn, BIND_AUTO_CREATE);private ServiceConnection mConn = new ServiceConnection() {@Overridepublic void onServiceDisconnected(ComponentName name) {//try {mAIDLService.unregisterCallback(mClientCallback);} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();}mAIDLService = null;}@Overridepublic void onServiceConnected(ComponentName name, IBinder service) {//Log.e(TAG,"Dialog bind");mAIDLService = IDialogService.Stub.asInterface(service);try {mAIDLService.registerCallback(mClientCallback);} catch (RemoteException e) {e.printStackTrace();}//onDialogOpen();}};private IDialogService mAIDLService;
Service中继承AIDL并重写

@Overridepublic void registerCallback(IClientCallback mDialogCallback)throws RemoteException {WebsocketService.this.mDialogCallback = mDialogCallback;}
然后只要在Service中调用mClientCallback中的onReceiverMessage方法传入数据即可更新UI




原创粉丝点击