2013-06-16 20 views
14

Czy ktoś może wyjaśnić, dlaczego Handlery mają możliwość uruchomienia? Czy nadpisywanie wiadomości Czy wysyłanie wiadomości powoduje to samo?Android: Dlaczego Handlery są uruchamiane?

Napisałem kilka nieprzetestowanych kodu, aby pokazać, jak myślę, że te dwa sposoby zostaną wdrożone. Proszę, popraw mnie, jeśli się mylę w moim podejściu.

Handler z post:

handler.post(new Runnable() { 
    @Override 
    public void run() { 
     imageView.doSomething(); 
    } 
}); 

Handler z handleMessage:

final Handler handler = new Handler() { 
    @Override 
    public void handleMessage(Message message) { 
     imageView.doSomething(); 
    } 
}; 

handler.sendMessage(message); 

Odpowiedz

11

Oba fragmenty kodu działają tak samo, konwencjonalnie użyć Handler.postRunnable gdy chcesz wykonać jakiś kod na UI Wątek bez konieczności posiadania jakichkolwiek informacji o obiekcie Handler. Ma to sens w wielu przypadkach, gdy należy wykonać dowolny kod na węźle UI.

Jednak w niektórych przypadkach chcesz zorganizować co jest wysyłane do UI wątek i mają specyficzne funkcje chcesz wykonać ten sposób można użyć sendMessage.

Nie sądzę, że jest kara pieniężna za korzystanie z jednej nad drugą. Od Ciebie zależy, czy użyjesz tego, co uważasz za bardziej odpowiednie.

+0

Cóż, istnieje bardzo małe uderzenie wydajności w tworzenie nowego obiektu (działającego). Ale to nieistotne. – eordano

+2

Jednakże, jeśli chcesz wykonać kod na wątku UI, musisz utworzyć Handler w wątku UI lub użyć "new Handler (Looper.getMainLooper())". Dzięki "new Handler()" tworzysz Handler w bieżącym wątku, który nie musi być głównym wątkiem. – Kuno

Powiązane problemy