활동과 서비스 (다른 응용 프로그램에 있음) 사이에 통신을 만들었습니다. 내 서비스가 활동에서 호출을 받으면 태스크를 수행 할 새 스레드를 생성합니다. 일반적으로이 작업을 완료하는 데 3 초가 걸립니다.다른 응용 프로그램에서 활동과 서비스 간의 통신
활동의 메시지가 서비스에 오면이를 보유합니다. 그리고이 메시지의 replyTo가 null인지 아닌지 확인하십시오. replyTo가 null이 아닙니다.
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는 null이 아닙니다. 그러나 3 초 후 업데이트 메서드에서 replyTo가 null이며 충돌합니다.
왜 그럴까요? IncomingHandler가 정적 클래스이기 때문에 아마? 또는 다른 이유는 무엇입니까?
그것의 사실이 아니다, 내가 Message.obatain를 호출하기 전에 ReplyTo의 값을 체크 아웃 (이다 , ...), replyTo의 값은 여전히 null입니다. 방금 수정 한 코드를 보겠습니다. – chipbk10
실수입니다. replyTo가 Handlet 인 타겟이있는 메신저인데 오해하고 있습니다. – pskink