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