暂停并恢复线程绘制到SurfaceView

时间:2010-03-20 14:22:28

标签: java android multithreading

我正在开发一款针对Android(http://androidchess.appspot.com)的国际象棋游戏,使用SurfaceView作为棋盘。我有一个绘图Thread,它在一个循环中绘制棋盘。问题是,当没有活动动画时(这超过90%的时间),浪费CPU和电池进行绘图是没有意义的。我该怎么解决这个问题?也许以某种方式暂停和恢复绘图Thread

2 个答案:

答案 0 :(得分:3)

尝试这样的事情(您可以通过尝试this code来测试它):

final Object monitor = new Object();

class Drawing implements Runnable
{
    @override
    void run()
    {
        while(true)
        {

            synchronized(monitor)
            {
                monitor.wait();
            }

            // draw
        }
    }
}

public static void main(String[] args) {

    // start your thread
    while(true)
    {
        if( needRefresh )
        {
            synchronized(monitor)
            {
                monitor.notify();
            }
        }
    }
}

我建议使用Semaphore如果您想要发信号一次然后继续绘制(即不阻止),直到信号关闭。

答案 1 :(得分:0)

你自己几乎回答了这个问题。在没有渲染任何内容时,您应该暂停绘制线程。使用OpenGL SurfaceView时,您还可以使用立即模式(连续绘制)或手动模式(按请求绘制)。