另一个应用程序中的活动和服务之间的通信

Posted

技术标签:

【中文标题】另一个应用程序中的活动和服务之间的通信【英文标题】:Communication between an activity and a service in another application 【发布时间】:2013-06-12 05:52:21 【问题描述】:

我在活动和服务(位于另一个应用程序中)之间创建了通信。当我的服务收到来自活动的调用时,它会生成一个新线程来执行任务。通常,完成此任务需要 3 秒。

当来自活动的消息到达服务时,我们会持有它。并检查此消息的replyTo 是否为空。 replyTo 不为空。 (好的)

公共类 RemoteService 扩展服务 ... 私有静态类 IncomingHandler 扩展 Handler 实现 Observer 私信消息; @覆盖 公共无效句柄消息(消息消息) //- 保存到达消息 this.msg = 味精; //- 检查replyTo的值 信使回复 = msg.replyTo; 如果(回复!= null) Log.d("tag","re​​plyTo ====//////==== null"); 别的 Log.d("tag","re​​plyTo ======== null"); //- 产生一个新线程来完成任务 尝试 CustomThread 线程 = 新的 CustomThread(); thread.registerObserver(this); 线程.start(); catch(异常 e) log.d("标签",e.getMessage()); //- 任务完成时 @覆盖 公共无效更新(int结果,字符串值) //- 检查replyTo的值 信使回复 = msg.replyTo; 如果(回复!= null) Log.d("tag","re​​plyTo ====//////==== null"); 别的 Log.d("tag","re​​plyTo ======== null"); //- 准备数据 捆绑数据 = 新捆绑(); data.putString("key",value); 消息消息 = Message.obtain(null,2,0,0); message.setData(数据); //- 向活动发送消息 if (replyTo != null) replyTo.send(message);

任务完成后,它会通知托管它的类。它将调用 update 方法。在 handleMessage 方法中,replyTo 不为空。但是,3秒后,在update方法中,replyTo为null,就崩溃了。

这是为什么呢?可能是因为 IncomingHandler 是一个静态类?还是什么原因?

【问题讨论】:

【参考方案1】:

通过调用 Message.obtain(null, ...- 这就是为什么 replyTo 为空

【讨论】:

不是这样,我在调用Message.obatain(null,...)之前查看了replyTo的值,replyTo的值还是null。请看一下我刚刚修改的代码 我的错误,我误导了replyTo,它是一个Messenger,目标是一个Handlet,对不起

以上是关于另一个应用程序中的活动和服务之间的通信的主要内容,如果未能解决你的问题,请参考以下文章

Android:如何在 2 个活动之间进行通信

在片段和活动之间进行通信 - 最佳实践

活动/服务和小部件提供者之间的通信?

android - 在活动和后台服务之间进行通信的最佳方式

多任务实时系统中的同步与通信

开发两个 android 应用程序并在两个应用程序之间进行通信