我正在开发一款针对Android(http://androidchess.appspot.com)的国际象棋游戏,使用SurfaceView
作为棋盘。我有一个绘图Thread
,它在一个循环中绘制棋盘。问题是,当没有活动动画时(这超过90%的时间),浪费CPU和电池进行绘图是没有意义的。我该怎么解决这个问题?也许以某种方式暂停和恢复绘图Thread
?
答案 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时,您还可以使用立即模式(连续绘制)或手动模式(按请求绘制)。