Activity与Service用Messenger通信
来源:互联网 发布:ubuntu查看ip 编辑:程序博客网 时间:2024/05/29 18:03
1.在Service中创建Messenger包装Handler引用Service中的handler: Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case MSG_INIT: FileInfo fileInfo= (FileInfo) msg.obj; Log.i("test", "Init" + fileInfo.toString()); //启动下载任务的服务,每个任务启动3个线程 DownloadTask task=new DownloadTask(DownloadService.this,fileInfo,3,activityMassager); //把下载任务添加到集合中 tasks.put(fileInfo.getId(),task); task.downLoad(); Message message=new Message(); message.what=MSG_START; message.obj=fileInfo; try { activityMassager.send(message); } catch (RemoteException e) { e.printStackTrace(); } break; case MSG_BIND://处理绑定的 activityMassager=msg.replyTo;//获取到Activity的Manager,用于传递信息 break; case MSG_START: FileInfo fileInfo1=(FileInfo)msg.obj; //启动初始化线程 new InitThread(fileInfo1).start(); break; case MSG_STOP: FileInfo fileInfo2=(FileInfo)msg.obj; //从任务集合中取出下载任务 DownloadTask task1=tasks.get(fileInfo2.getId()); if(task1!=null){ //暂停下载 task1.isPuse=true; } break; } } }; 2.在Service的onBind方法中返回Messenger @Override public IBinder onBind(Intent intent) { //创建一个messager对象 Messenger messager=new Messenger(handler); return messager.getBinder(); }3.Activity的create()中绑定Service,获取Service的Messenger //通过connection对象绑定Service,connection定义在第5点 Intent intent=new Intent(this,DownloadService.class); bindService(intent,connection, Service.BIND_AUTO_CREATE);4.在connection对象中Activity中创建Messenger包含Handler引用。Activity中的handler: Handler handler=new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case DownloadService.MSG_UPDATE: int finished=msg.arg1; int id=msg.arg2; adapter.updateProgress(id, finished); //更新通知里的进度条 notificationUtil.updateNotification(id, finished); break; case DownloadService.MSG_FINISH: //下载结束 FileInfo fileInfo= (FileInfo) msg.obj; //更新进度为0 adapter.updateProgress(fileInfo.getId(), 0); Toast.makeText(MainActivity.this,fileInfoList.get(fileInfo.getId()).getFileName()+"下载完毕",Toast.LENGTH_SHORT).show(); //取消通知 notificationUtil.cancelNotification(fileInfo.getId()); break; case DownloadService.MSG_START: //显示通知 notificationUtil.showNotification((FileInfo) msg.obj); break; } } };5.在connection对象中使用Service的Messenger发送信息给Service的Handler,信息包括Activity的Messenger,connection定义如下: ServiceConnection connection=new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) {//连接时调用 //获得service中的Messager serviceMessager=new Messenger(service); //创建Activity中的Messeager Messenger messager=new Messenger(handler); //创建消息 Message msg=new Message(); msg.what=DownloadService.MSG_BIND; msg.replyTo=messager;//传递Messenger //使用Service的Messager发送activity中的Messager try { serviceMessager.send(msg); } catch (RemoteException e) { e.printStackTrace(); } } @Override public void onServiceDisconnected(ComponentName name) { } };6.这样就可以实现双向通信,处理收到的数据在定义的Handler中,发送数据的格式,只需要调用Messenger中的send()方法就可以发数据: Message message=new Message(); message.what=MSG_START; message.obj=fileInfo; try { activityMassager.send(message); } catch (RemoteException e) { e.printStackTrace(); }
0 0
- Activity与Service用Messenger通信
- Activity与Service间的通信:Messenger
- Activity与Service跨进程通信(Messenger方式)
- 通过messenger实现activity与service的相互通信
- Android Service与Activity之间通信使用Messenger方式
- Activity与service间的Messenger通信方式
- Activity与Service通信之信使(Messenger)
- Android 使用messenger实现service与activity通信
- Service与Activity通信方式之Messenger(信使)
- 用Messenger实现Activity与Service的信息交互
- Messenger实现Activity与Service的双向通信
- Activity与Service通过Messenger交互
- Activity与Service通信
- Service与Activity通信
- Activity与Service通信
- Activity与Service通信
- Activity与Service通信
- Activity与Service通信
- BAV99的ESD保护作用解析
- mui代码块
- http 协议 与tcp/ip协议、Socket的区别
- 焦点冲突处理例子
- 关于java数据类型的自己的见解
- Activity与Service用Messenger通信
- SDAU练习四总结
- 测试MySQL是否安装成功
- HDU 4911 (树状数组)
- 程序员——java基础之继承
- iOS-最全的App上架教程
- hive介绍与安装
- PHP架构师的成长之路
- (电工基地课程笔记)基本时序逻辑