1

我在活动和服务(位于另一个应用程序中)之间创建了通信。当我的服务收到来自活动的调用时,它会生成一个新线程来执行任务。通常,完成此任务需要 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 不为null。但是,3秒后,在update方法中,replyTo为null,就崩溃了。

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

4

1 回答 1

1

您通过调用收到一条新消息: Message.obtain(null, ...- 这就是为什么 replyTo 为 null

于 2013-06-15T21:18:17.330 回答