2010-07-19 8 views
5

Czy wątek tła może umieścić kolejkę wiadomości w głównym wątku i bloku wątku interfejsu użytkownika, dopóki ten komunikat nie zostanie obsłużony?Android: Możliwe, że wątek tła zostanie zablokowany do czasu zakończenia działania wątku interfejsu użytkownika?

W tym kontekście chciałbym, aby moja usługa zdalna obsługiwała każdą opublikowaną operację z głównego wątku interfejsu użytkownika, zamiast wątku wątku, z którego otrzymała żądanie IPC.

Odpowiedz

4

To powinno zrobić to, czego potrzebujesz. Używa on notify() i wait() ze znanym obiektem, aby ta metoda miała charakter synchroniczny. Coś wewnątrz run() będzie działać na wątku UI i po zakończeniu zostanie zwrócone sterowanie do doSomething(). Spowoduje to oczywiście uśpienie wywołującej nici.

public void doSomething(MyObject thing) { 
    String sync = ""; 
    class DoInBackground implements Runnable { 
     MyObject thing; 
     String sync; 

     public DoInBackground(MyObject thing, String sync) { 
      this.thing = thing; 
      this.sync = sync; 
     } 

     @Override 
     public void run() { 
      synchronized (sync) { 
       methodToDoSomething(thing); //does in background 
       sync.notify(); // alerts previous thread to wake 
      } 
     } 
    } 

    DoInBackground down = new DoInBackground(thing, sync); 
    synchronized (sync) { 
     try { 
      Activity activity = getFromSomewhere(); 
      activity.runOnUiThread(down); 
      sync.wait(); //Blocks until task is completed 
     } catch (InterruptedException e) { 
      Log.e("PlaylistControl", "Error in up vote", e); 
     } 
    } 
} 
+1

Nie rozumiem, co wywołanie notify() na String? –

Powiązane problemy