2013-11-15 4 views
0

У меня есть активность, которая, по сути, запускает несколько потоков, чтобы получить несколько ресурсов из сети. Я обновляю пользовательский интерфейс после получения уведомлений из этих потоков с помощью механизма ResultReceiver. фрагмент кода выглядит, как показано ниже,Android ResultReceiver в многопоточной среде

public void onReceiveResult(int resultCode, Bundle resultData){ 

    switch(resultCode){ 

    case 1: updateData1(); 
     break; 

    case 2: updateData2(); 
     break; 

    case 3: updateData3(); 
     break; 
} 

As, его основной поток, который обновляет элементы пользовательского интерфейса на получение уведомлений от этих потоков, я думал, что это будет хорошая идея, чтобы сделать метод onReceiveResult синхронизируются. Любые комментарии? Есть ли что-нибудь еще, что нужно позаботиться, чтобы оно было эффективным и безопасным?

+2

Данные уже выстроил и сигнал на поток пользовательского интерфейса. 'onReceiveResult' не будет вводиться непосредственно из других потоков с помощью механизма ResultReceiver - вызов сериализуется. Синхронизация требуется только в том случае, если вы явно вызываете обработчик из других потоков. –

ответ

0

Нет, это не поможет, и оно заблокирует поток. Вместо того, чтобы запустить код, который будет изменять пользовательский интерфейс в потоке пользовательского интерфейса, в противном случае вы будете иметь проблемы в зависимости от того, где называется эта onReceiveResult ...

activity.runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 
       updateData1(); 
      } 
}); 
Смежные вопросы