当前位置: 首页 > 知识库问答 >
问题:

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

范侯林
2023-03-14

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

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

public class RemoteService extends Service{
    ...
    private static class IncomingHandler extends Handler implements Observer{       

        private Message msg;

        @Override
        public void handleMessage(Message msg){

            //- Hold the arrival message                        
            this.msg = msg;

            //- Check out value of replyTo
            Messenger replyTo = msg.replyTo;
            if (replyTo != null)
                Log.d("tag","replyTo ====///////==== null");
            else 
                Log.d("tag","replyTo ======== null");                                   

            //- Spawn a new thread to do the task   
            try{
                CustomThread thread = new CustomThread();
                thread.registerObserver(this);
                thread.start();
            }catch (Exception e) {
                log.d("tag",e.getMessage());
            }           
        }

        //- When the task is done
        @Override
        public void update(int result, String value) {

            //- Check out value of replyTo
            Messenger replyTo = msg.replyTo;
            if (replyTo != null)
                Log.d("tag","replyTo ====///////==== null");                           
            else 
                Log.d("tag","replyTo ======== null");

            //- prepare the data
            Bundle data = new Bundle();
            data.putString("key",value);
            Message message = Message.obtain(null,2,0,0);
            message.setData(data);

            //- Send message to the activity
            if (replyTo != null) replyTo.send(message);

        }
}

当任务完成时,它通知承载它的类。它将调用方法更新。在handleMessage方法中,replyTo不为空。但是,3秒后,在update方法中,replyTo为null,并且崩溃。

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

共有1个答案

姜宏盛
2023-03-14

通过调用:Message.auttain(null,...-这就是replyTo为null的原因

 类似资料:
  • 你好,Stackoverflow社区,我是android新手,正在学习如何实现基于位置的服务<我成功地实现了一个速度计应用程序,它可以测量当前速度、总距离和总行驶时间。 现在,我想添加一个附加功能,如果速度增加40公里/小时,我会打开图片并使用前置摄像头拍照。 我对实现这一点感到困惑,因为location是作为一个单独的LocationService类提供的。我看了很多例子,但我无法将其应用到我的

  • 此外,在微服务之间具有HTTP依赖关系,例如当使用HTTP请求链创建长请求/响应周期时,如图4-15的第一部分所示,不仅使微服务不自治,而且一旦链中的一个服务表现不佳,它们的性能就会受到影响。 来源:https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/architect-microservice-c

  • 问题内容: 如何建立Java应用程序侦听php发送的数据的方式?套接字还是Http POST? 本质上,我在另一台服务器上运行Java应用程序,以等待在另一台服务器上运行的PHP脚本发送的某些字符串数据。 任何图书馆建议或示例代码将不胜感激。 问题答案: 最好的选择可能是设置一个Java servlet“容器”(服务器),例如tomcat(如果出于公司原因,您可以花很多钱购买其他东西)。 http

  • 我有Jasper Reports服务器(安装在www.example.net上)和一个单独的Java/JSP应用程序(安装在www.example.net上),我在寻找不同的选项来生成报告。 选项1(当前工作解决方案) 我目前的工作解决方案是用户登录到Java /JSP应用程序,并选择一个报告。应用程序创建报告的XML表示,并将其保存为,然后使用以下代码将其发送到Jasper报告服务器: (请注意

  • 问题内容: 我试图弄清楚如何通过使用Android应用程序在网页上显示实时数据。 例如,用户正在使用android应用并获得评分(回答问题)。我的网页将实时显示分数。 IV得出使用Redis的结论,但是我需要什么才能使其正常工作?我是否需要一个可与我的网页进行通信的Web套接字。这个套接字可以是python,它在其中访问数据库,然后按顺序响应分数? 我正在努力寻找这种方法到底是怎么工作的,因为这对

  • 本文向大家介绍Web服务器和应用程序服务器之间的区别,包括了Web服务器和应用程序服务器之间的区别的使用技巧和注意事项,需要的朋友参考一下 服务器是一个中心位置,通过网络应用程序可以存储和访问信息和程序。Web Server是一种服务器,它接受数据请求并返回相关文档,而Application Server包含一个ejb容器组件以及运行企业应用程序。 以下是Web服务器和应用程序服务器之间的重要区别