2013-06-15 1 views
0

활동과 서비스 (다른 응용 프로그램에 있음) 사이에 통신을 만들었습니다. 내 서비스가 활동에서 호출을 받으면 태스크를 수행 할 새 스레드를 생성합니다. 일반적으로이 작업을 완료하는 데 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가 정적 클래스이기 때문에 아마? 또는 다른 이유는 무엇입니까?

답변

1

당신이 호출하여 새 메시지를 받고 : ReplyTo의가 null 인 이유 Message.obtain (null의 경우, ...-는 null

+0

그것의 사실이 아니다, 내가 Message.obatain를 호출하기 전에 ReplyTo의 값을 체크 아웃 (이다 , ...), replyTo의 값은 여전히 ​​null입니다. 방금 수정 한 코드를 보겠습니다. – chipbk10

+0

실수입니다. replyTo가 Handlet 인 타겟이있는 메신저인데 오해하고 있습니다. – pskink

관련 문제