2013-06-15 2 views
0

Я создал связь между активностью и службой (находится в другом приложении). Когда моя служба получает вызов от активности, она создает новый поток для выполнения задачи. Обычно для выполнения этой задачи требуется 3 секунды.Связь между активностью и службой в другом приложении

Когда сообщение от активности приходит к сервису, мы держим его. И проверьте, является ли ответ этого сообщения нулевым или нет. AnswerTo не равно null. (OK)

 
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 ответ не равен null. Однако, через 3 секунды, в update метод replyTo имеет значение null, и он сработает.

Почему? вероятно, потому что IncomingHandler является статическим классом? или какие еще причины?

ответ

1

вы получаете новое сообщение по телефону: Message.obtain (нуль, ...- вот почему REPLYTO является нулевым

+0

Это не правда, я проверяю значение REPLYTO перед вызовом Message.obatain (нуль , ...), значение replyTo по-прежнему равно нулю. Пожалуйста, взгляните на код, который я только что изменил – chipbk10

+0

моя ошибка, я вводил в заблуждение ответ, который является Messenger с целью, которая является Handlet, извините за это – pskink

Смежные вопросы