Question

I have two threads in an Android application, one is the view thread, and the other is the worker thread. What I want to do is, sleep the worker thread until the view thread terminates the handling of the onDraw method.

How i can do this? is there any wait for the signal or something?

Was it helpful?

Solution

Share a java.lang.Object between the two threads, whose sole purpose is to tell the worker thread when it can continue its work. Whenever the worker thread reaches a point where it should sleep, it does this:

stick.wait();

When the view thread finishes its onDraw work, it calls this:

stick.notify();

Note the requirement that the view thread owns the monitor on the object. In your case, this should be fairly simple to enforce with a small sync block:

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

Consult the javadoc for java.lang.Object on these methods (and notifyAll, just in case); they're very well written.

OTHER TIPS

If you want a higher-level concurreny API (with things like Barriers), you could try the backport of the java 5 concurrency API, which works on java 1.3 and above, and may work on Android. The likes of Object.wait/notify will work, but they can be a bit terse.

Backport-util-concurrent

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top