Поток теряет сообщение после wait () и notify () - PullRequest
3 голосов
/ 19 апреля 2010

У меня проблема с обработкой сообщений в теме. Мой метод запуска выглядит так

public void run() {           
   Looper.prepareLooper();
   parserHandler = new Handler {
      public void handleMessage(Message msg) {
         Log.i("","id from message: "+msg.getData.getString("id"));
         // handle message
         this.wait();
      }
   }
}

У меня есть несколько действий, отправляющих сообщения в эту ветку, например:

Message parserMessage = new Message();
Bundle data = new Bundle();
data.putString("id", realId);
data.putString("callingClass", "CategoryList");
parserMessage.setData(data);
parserMessage.what = PARSE_CATEGORIES_OR_PRODUCTS;

parserHandler = parser.getParserHandler();

synchronized (parserHandler) {
    parserHandler.notify();
    Log.i("","message ID:  " + parserMessage.getData().getString("id"));
}

parserHandler.sendMessage(parserMessage);

Проблема заключается в том, что метод run регистрирует «id from message: null», хотя «идентификатор сообщения» имеет значение в операторе Log. Почему сообщение «теряет» свои данные при отправке в поток? Это как-то связано с уведомлением? Спасибо за вашу помощь

1 Ответ

0 голосов
/ 25 мая 2010

Так что я думаю, что понял проблему. Это был MessageQueu в сочетании с OnScrollListener, который я использовал в другом месте моего кода. OnScrollListener вызывался несколько раз, поэтому MessageQueu был заблокирован сообщениями от этого слушателя.

...