Question

J'ai deux threads dans une application Android, l'un est le thread de vue et l'autre, le thread de travail. Ce que je veux faire est de mettre le thread de travail en veille jusqu'à ce que le thread de vue mette fin au traitement de la méthode onDraw.

Comment je peux faire ça? y at-il une attente pour le signal ou quelque chose?

Était-ce utile?

La solution

Partagez un objet java.lang.Object entre les deux threads, dont l'unique objectif est d'indiquer au thread de travail qu'il peut poursuivre son travail. Chaque fois que le thread de travail atteint un point où il devrait dormir, il effectue ceci:

stick.wait();

Lorsque le fil de la vue termine son travail onDraw, il appelle ceci:

stick.notify();

Notez l'exigence que le thread de vue possède le moniteur sur l'objet. Dans votre cas, cela devrait être assez simple à appliquer avec un petit bloc de synchronisation:

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

Consultez le javadoc pour java.lang.Object sur ces méthodes (et notifyAll, juste au cas où); ils sont très bien écrits.

Autres conseils

Si vous souhaitez une API de concurreny de niveau supérieur (avec des éléments tels que Barriers), vous pouvez essayer le backport de l’API de concurrence 5 java, qui fonctionne sur java 1.3 et versions ultérieures, et peut fonctionner sur Android. Les objets comme Object.wait / notify fonctionneront, mais ils peuvent être un peu laconiques.

Backport-util-concurrent

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top