В книжке Beginning Android games есть кусок кода, про вынос отрисовки картинки в отдельный тред. Непонятно, за счёт чего в данном случае прерывается бесконечный цикл в методе pause().
По идее в отдельном треде работает только метод run()? Что происходит, когда из основного треда вызывается метод объекта запущенного в дополнительном треде, в каком треде он выполняется?
class FastRenderView extends SurfaceView implements Runnable {
Thread renderThread = null;
SurfaceHolder holder;
volatile boolean running = false;
public FastRenderView (Context context) {
super(context);
holder = getHolder();
}
public void resume () { // вызывается из onResume() в родительской Activity
running = true;
renderThread = new Thread(this);
renderThread.start();
}
public void run () {
while (running) {
if (!holder.getSurface().isValid())
continue;
Canvas canvas = holder.lockCanvas();
canvas.drawRGB(255,0,0);
holder.unlockCanvasAndPost(canvas);
}
}
public void pause () { // вызывается из onPause() в родительской Activity
running = false;
while (true) {
try {
renderThread.join();
} catch (InterruptedException e) {
//
}
}
}
}