最近做了一个AIDL 绑定服务,一般的流程就不用讲了,网上很多例子,
其中另加的是绑定服务的时候传入一个AIDL接口到Service,Service通过该接口传入数据到Activity,再通过Handler更新UI;
在activity中实例化一个mHandler类
private Handler mHandler = new Handler()
{
@Override
public 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() {
@Override
public 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() {
@Override
public void onServiceDisconnected(ComponentName name) {
//
try {
mAIDLService.unregisterCallback(mClientCallback);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
mAIDLService = null;
}
@Override
public 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并重写
@Override
public void registerCallback(IClientCallback mDialogCallback)
throws RemoteException {
WebsocketService.this.mDialogCallback = mDialogCallback;
}
然后只要在Service中调用mClientCallback中的onReceiverMessage方法传入数据即可更新UI