当前位置: 首页 > news >正文

【2013-11-10】Android应用开发笔记:使用Messenger与Service通讯

[历史归档]本文原发布于 cstriker1407.info 个人博客,内容为历史存档,仅供参考。
发布时间:2013-11-10| 标题:Android应用开发笔记:使用Messenger与Service通讯分类:编程 / android |标签:android·service·messenger


Android应用开发笔记:使用Messenger与Service通讯

    • Messenger 使用步骤
    • MainActivity
    • MessengerService
    • 备注

Messenger 是一种用于 Activity 与 Service 双向通讯的方式,可通过两种构造函数创建(参考 Android SDK):

  • 通过onServiceConnectedIBinder参数构造
  • 通过本地Handler构造

Messenger 使用步骤

  1. Activity 和 Service 各自声明两个 Messenger:一个通过本地 Handler 构造,另一个初始为 null。
  2. Activity 与 Service 绑定后,Activity 通过onServiceConnected的参数构造指向 Service 的 Messenger。
  3. Activity 向 Service 发送消息时,将本地 Messenger 作为replyTo字段附带,Service 保存后即可反向通讯。

GitHub:https://github.com/cstriker1407/android/tree/master/MessengerService

MainActivity

publicclassMainActivityextendsActivity{privateclassActivityHandlerextendsHandler{@OverridepublicvoidhandleMessage(Messagemsg){Log.d("activity",msg.toString());}}privateMessengermServiceMessenger=null;privateMessengermActivityMessenger=newMessenger(newActivityHandler());privateServiceConnectionmConnection=newServiceConnection(){publicvoidonServiceConnected(ComponentNameclassName,IBinderservice){mServiceMessenger=newMessenger(service);MessagemsgToService=newMessage();msgToService.replyTo=mActivityMessenger;msgToService.obj="this is from activity";try{mServiceMessenger.send(msgToService);}catch(RemoteExceptione){e.printStackTrace();}}publicvoidonServiceDisconnected(ComponentNameclassName){mServiceMessenger=null;}};@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@OverrideprotectedvoidonStart(){super.onStart();bindService(newIntent(this,MessengerService.class),mConnection,Context.BIND_AUTO_CREATE);}@OverrideprotectedvoidonStop(){super.onStop();unbindService(mConnection);}}

MessengerService

publicclassMessengerServiceextendsService{privateclassServiceHandlerextendsHandler{@OverridepublicvoidhandleMessage(Messagemsg){Log.d("Service",msg.toString());mActivityMessenger=msg.replyTo;MessagemsgToAct=newMessage();msgToAct.obj="this is from service";try{mActivityMessenger.send(msgToAct);}catch(RemoteExceptione){e.printStackTrace();}}}privateMessengermServiceMessenger=newMessenger(newServiceHandler());privateMessengermActivityMessenger=null;@OverridepublicIBinderonBind(Intentintent){Toast.makeText(getApplicationContext(),"binding",Toast.LENGTH_SHORT).show();returnmServiceMessenger.getBinder();}}

备注

  • Messenger 支持跨进程通讯,可以替代 AIDL(未经测试)。
  • Messenger 的明显优势:Service 可通过replyTo字段直接回调 Activity,无需 AIDL 接口。
http://www.jsqmd.com/news/1163767/

相关文章:

  • 如何构建自进化企业级 Agent 平台
  • 第一章Netty, NIO字节缓冲区案例实现
  • 大模型 API 容错设计:重试、降级、熔断一个都不能少
  • ST-Link 下载报错定位手册(含接线+设置)
  • 2026年7月最新天津雅典官方售后维修服务网点地址与客服电话 - 亨得利官方服务中心
  • Claude Code 运维实战:用 AI Skill 打造自动化运维新范式
  • 托运摩托车,到底要不要打木架? - 快递物流资讯
  • 2026免费图片文字识别工具全解:在线网页、电脑软件、小程序实操指南
  • C#企业级高并发数据采集平台:工控现场复杂环境适配实战
  • 孤能子视角:三十六计之擒贼擒王——拓扑结构重构
  • 如何用OneMore插件实现OneNote效率革命:160+命令的完整指南
  • 寒地专网筑根基,全域服务践初心——黑龙江单工科技赋能东三省内蒙应急与行业通信升级纪实 - 无线电评测大师
  • 酸度梯度控制的原理---(技术突破及工艺应用)
  • 基于改进YOLOV11与Fasternet-BiFPN的工厂碳纤维缺陷识别研究
  • UVa 483 Word Scramble
  • 掌握Java虚拟机内存管理与GC调优
  • 混凝土用膨胀型锚栓
  • 高压快充普及重构用车生态:补能格局洗牌,重新定义新能源车产品力
  • 技术架构:技术选型和基础设施
  • 零成本开启企业碳足迹管理:openLCA开源生命周期评估工具完全指南
  • 使用 TiUP 工具升级 TiDB 集群到 v7.5 的具体步骤是什么?
  • esp32开发与应用(3.5寸触摸屏+lvgl)
  • 雷军从造年轻人车转向中年市场,小米澎程能在增程式SUV赛道再赢一次吗?
  • 2026年房地产动画行业观察
  • 多智能体不是堆 AI——跟着一个“AI 编辑部“看协作怎么跑通
  • 智能路由分发_acp-router
  • AI 赋能传统报表系统:自然语言查询到 SQL 生成的工程化管道
  • 摄像头 ISP 中典型 Image Signal Processing Pipeline
  • 影刀RPA Python读写配置文件:INI与YAML管理参数告别硬编码
  • 达梦数据库-堆栈看问题-02-flst_remove