使用android中的AIDL让Service与Activity通信[转]
16lz
2021-01-24
http://linconz.net/archives/229.html
http://linconz.net/archives/314.html
首先建立一个ICallback.aidl文件,作为Activity中的回调方法
view plain copy to clipboard print ?- packagecom.zhang.test.service;
- interfaceICallback{
- voidshowResult(intresult);
- }
然后再建立一个IService.aidl用来在Activity中接收Service回调,以及在Service中onBind时返回的Binder
注意:aidl中import不能写com.xxx.*,要写全类的路径
- packagecom.zhang.test.service;
- importcom.zhang.test.service.ICallback;
- interfaceIService{
- voidregisterCallback(ICallbackcb);
- voidunregisterCallback(ICallbackcb);
- }
接下来是service:
MainService.java
- packagecom.zhang.test.service;
- importandroid.app.Service;
- importandroid.content.Intent;
- importandroid.os.Handler;
- importandroid.os.IBinder;
- importandroid.os.Message;
- importandroid.os.RemoteCallbackList;
- importandroid.os.RemoteException;
- importandroid.util.Log;
- publicclassMainServiceextendsService{
- privatestaticfinalStringTAG="MainService";
- privateRemoteCallbackList<icallback>mCallbacks=newRemoteCallbackList<icallback>();
- privateIService.StubmBinder=newIService.Stub(){
- @Override
- publicvoidunregisterCallback(ICallbackcb){
- if(cb!=null){
- mCallbacks.unregister(cb);
- }
- }
- @Override
- publicvoidregisterCallback(ICallbackcb){
- if(cb!=null){
- mCallbacks.register(cb);
- }
- }
- };
- @Override
- publicIBinderonBind(Intentintent){
- Log.d(TAG,"onBind");
- returnmBinder;
- }
- @Override
- publicvoidonCreate(){
- Log.d(TAG,"onCreate");
- //这里不知道为什么,直接使用callback方法回调showResult
- //mCallbacks.beginBroadcast()是0,需要用handler延迟1000毫秒
- //也许是在activity中binService太耗时的原因?
- mHandler.sendEmptyMessageDelayed(0,1000);
- super.onCreate();
- }
- @Override
- publicvoidonDestroy(){
- mHandler.removeMessages(0);
- mCallbacks.kill();
- super.onDestroy();
- }
- privatevoidcallBack(){
- int
- 2011-04-29 14:42
- 浏览 743
- 评论(0)
- 分类:移动开发
- 相关推荐
评论
发表评论
您还没有登录,请您登录后再发表评论
更多相关文章
- Android之自定义ViewGroup
- [Android]单元测试实例
- android 解决viewpager+多个fragment+recyclerview,viewpager展示
- android GMS认证之CTS测试命令详细
- Android删除短信的方法
- Android(安卓)ListView实现方法一(ListActivity)
- Android(安卓)一键退出APP 实现
- Android(安卓)自定义Dialog,以及失去焦点之后,Dialog消失的解决
- android 6.0 不弹允许usb调试 授权对话框