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

当来自活动的消息到达服务时,我们将其保留。并检查此消息的replyTo是否为空。 replyTo不为null。 (好)

公共类RemoteService扩展服务{
    ...
    私有静态类IncomingHandler扩展了Handler实现Observer {

        私人消息味精;

        @Override
        公共无效handleMessage(消息msg){

            //-保留到达消息
            this.msg = msg;

            //-签出ReplyTo的值
            Messenger的MessengerTo = msg.replyTo;
            如果(replyTo!= null)
                Log.d(“ tag”,“ replyTo ==== //////// ==== null”);
            其他
                Log.d(“ tag”,“ replyTo ======== null”);

            //-产生一个新线程来执行任务
            尝试{
                CustomThread线程=新的CustomThread();
                thread.registerObserver(this);
                thread.start();
            }捕获(异常e){
                log.d(“ tag”,e.getMessage());
            }
        }

        //-完成任务后
        @Override
        公共无效更新(int结果,字符串值){

            //-签出ReplyTo的值
            Messenger的MessengerTo = msg.replyTo;
            如果(replyTo!= null)
                Log.d(“ tag”,“ replyTo ==== //////// ==== null”);
            其他
                Log.d(“ tag”,“ replyTo ======== null”);

            //-准备数据
            捆绑数据= new Bundle();
            data.putString(“ key”,value);
            消息消息= Message.obtain(null,2,0,0);
            message.setData(data);

            //-向活动发送消息
            如果(replyTo!= null)replyTo.send(message);

        }
}


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

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

最佳答案

您通过调用以下命令获取新消息:Message.obtain(null,...-这就是为什么replyTo为null

07-26 09:33