Domanda

Ho due thread in un'applicazione Android, uno è il thread di visualizzazione e l'altro è il thread di lavoro. Quello che voglio fare è mettere in pausa il thread di lavoro fino a quando il thread di visualizzazione non termina la gestione del metodo onDraw.

Come posso farlo? c'è qualche attesa per il segnale o qualcosa del genere?

È stato utile?

Soluzione

Condividi un oggetto java.lang.Object tra i due thread, il cui unico scopo è comunicare al thread di lavoro quando può continuare il suo lavoro. Ogni volta che il thread di lavoro raggiunge un punto in cui dovrebbe dormire, lo fa:

stick.wait();

Quando il thread della vista termina il suo lavoro onDraw, chiama questo:

stick.notify();

Nota il requisito che il thread di visualizzazione possiede il monitor sull'oggetto. Nel tuo caso, questo dovrebbe essere abbastanza semplice da applicare con un piccolo blocco di sincronizzazione:

void onDraw() {
  ...
  synchronized (stick) {
    stick.notify();
  }
} // end onDraw()

Consultare javadoc per java.lang.Object su questi metodi (e notificationAll, per ogni evenienza); sono scritti molto bene.

Altri suggerimenti

Se desideri un'API di concorrenza di livello superiore (con elementi come Barriere), puoi provare il backport dell'API di concorrenza di Java 5, che funziona su Java 1.3 e versioni successive e può funzionare su Android. Simili a Object.wait / notification funzioneranno, ma possono essere un po 'concisi.

Backport-util-concorrent

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top