Как передать объекты Runnable в обработчик? - PullRequest
4 голосов
/ 24 июля 2011

Я учусь по книге, и это дает мне такой пример:

Handler handler=new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
        bar.incrementProgressBy(5); 
    } 
}; 

и

Thread background=new Thread(new Runnable() { 
    public void run() { 
        try { 
            for (int i=0;i<20 && isRunning.get();i++) { 
                Thread.sleep(500); 
                handler.sendMessage(handler.obtainMessage()); 
            } 
        } catch (Throwable t) { 
            // just end the background thread 
        } 
    } 
}); 

Что прекрасно работает.Но далее в книге написано:

Если вы не хотите возиться с объектами сообщений, вы также можете передавать объекты Runnable в обработчик, который будет запускать эти объекты Runnable в потоке пользовательского интерфейса действия.,... вы можете использовать те же методы в любом представлении (т. е. в любом виджете или контейнере).Это немного упрощает ваш код, так как вы можете пропустить объект Handler.

Но нет примеров того, как это сделать с помощью объекта Runnable.У кого-нибудь есть пример?

Ответы [ 2 ]

4 голосов
/ 24 июля 2011

Примерно так:

Handler h = new Handler();

Thread background=new Thread(new Runnable() { 
          public void run() { 
            try { 
              for (int i=0;i<20 && isRunning.get();i++) { 
                Thread.sleep(500); 
                handler.post(new Runnable() {
                  public void run() {
                    bar.incrementProgressBy(5);
                  }
                });
              } 
            } 
            catch (Throwable t) { 
              // just end the background thread 
            } 
          } 
        }); 
2 голосов
/ 24 июля 2011

В соответствии с Документами Android для Обработчик :

публичный финальный логический пост (Runnable r)

Поскольку: уровень API 1 заставляет Runnable rбыть добавленным в очередь сообщений.Runnable будет запущен в потоке, к которому прикреплен этот обработчик.Параметры

r - Runnable, который будет выполнен.Возвращает

Возвращает true, если Runnable был успешно помещен в очередь сообщений.Возвращает false при ошибке, обычно потому, что завершается цикл обработки сообщений.

...