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