Java 暂停并将螺纹绘制恢复到SurfaceView

Java 暂停并将螺纹绘制恢复到SurfaceView,java,android,multithreading,Java,Android,Multithreading,我正在为Android()开发一个国际象棋游戏,使用棋盘上的SurfaceView。我有一个绘图线程,它把棋盘画成一个循环。问题是,当没有活动动画时(超过90%的时间),浪费CPU和电池进行绘图是没有意义的。我应该如何解决这个问题?也许是因为某种原因暂停并继续绘制线程?您自己基本上回答了这个问题。没有渲染任何内容时,应暂停绘图线程。使用OpenGL SurfaceView时,您还可以使用即时模式(连续绘制)或手动模式(按请求绘制)。尝试类似的方法(您可以通过尝试进行测试): 如果您想发出一次信号

我正在为Android()开发一个国际象棋游戏,使用棋盘上的
SurfaceView
。我有一个绘图线程,它把棋盘画成一个循环。问题是,当没有活动动画时(超过90%的时间),浪费CPU和电池进行绘图是没有意义的。我应该如何解决这个问题?也许是因为某种原因暂停并继续绘制
线程

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

尝试类似的方法(您可以通过尝试进行测试):


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

但是我应该如何暂停/恢复线程呢?根据Android的文档,Thread.suspend()是不推荐使用的。我想lirik的上述方法会起作用。另一种更现代的方法是将java并发类与锁/条件或类似方法结合使用。@fhucho我有一个简单的例子给你。。。请参阅我的答案了解更多详细信息。谢谢,等待/通知正是我想要的。
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();
            }
        }
    }
}