我在 Activity 和服务(位于另一个应用程序中)之间创建了通信。当我的服务收到来自 Activity 的调用时,它会生成一个新线程来执行任务。通常,完成此任务需要 3 秒。
当来自 Activity 的消息到达服务时,我们会保留它。并查看这条消息的replyTo是否为null。 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 是静态类?还是其他原因?
最佳答案
您正在通过调用获取新消息:Message.obtain(null, ...- 这就是 replyTo 为 null 的原因
关于java - 另一个应用程序中的 Activity 和服务之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17127830/