Android Canvas 使用过多 CPU
Android Canvas Using Too Much CPU
我正在 android 中使用 canvas 制作 简单的 2D 游戏。我认为这对我的游戏来说已经足够了。
但是锁定和解锁 canvas 操作使用大约 %40-%50 CPU。
这正常吗?或者我该怎么办?
这是我的游戏循环代码:
while(GVars.isGameRunning){
c=holder.lockCanvas();
p.setColor(Color.argb(255, 229, 43, 68));
c.drawRect(GMethods.createRec(0,0,GVars.size[0], 90),p);
for (int i = 0; i < GVars.size[0]/110; i++){
c.drawRoundRect(new RectF(i*100+30,100,i*100+130,100+100),10,10,p);
}
p.setColor(Color.argb(255,255,255,255));
p.setTextSize(50);
c.drawText("Simple text:", 0,60, p);
holder.unlockCanvasAndPost(c);
try{Thread.sleep(GVars.waitTime/*waitTime =30*/);}catch(Exception ex){};
}
对不起我的英语。
编辑:
我像这样再次尝试了一次。(在主线程中)它现在正在使用 cpu 的 %10。我想这就是我想要的。 :D 谢谢!
@Override
public void onDraw(Canvas c){
p.setTextSize(50);
for (int i = 0; i < GVars.size[0]/110; i++){
p.setColor(Color.argb(255,183, 33, 53));
c.drawRoundRect(new RectF(i*100+i*10, 100+5, i*100+100+i*10, 100+100+10),10,10,p);
}
p.setColor(Color.argb(255,255,255,255));
c.drawText("Test:", 0,60, p);
invalidate();
try{Thread.sleep(20);}catch (Exception ex){}
}
代码中的循环阻塞了主事件线程。相反,您应该使用 Android API 中的事件机制。具体来说,您需要覆盖 View.onDraw()
.
我正在 android 中使用 canvas 制作 简单的 2D 游戏。我认为这对我的游戏来说已经足够了。 但是锁定和解锁 canvas 操作使用大约 %40-%50 CPU。 这正常吗?或者我该怎么办? 这是我的游戏循环代码:
while(GVars.isGameRunning){
c=holder.lockCanvas();
p.setColor(Color.argb(255, 229, 43, 68));
c.drawRect(GMethods.createRec(0,0,GVars.size[0], 90),p);
for (int i = 0; i < GVars.size[0]/110; i++){
c.drawRoundRect(new RectF(i*100+30,100,i*100+130,100+100),10,10,p);
}
p.setColor(Color.argb(255,255,255,255));
p.setTextSize(50);
c.drawText("Simple text:", 0,60, p);
holder.unlockCanvasAndPost(c);
try{Thread.sleep(GVars.waitTime/*waitTime =30*/);}catch(Exception ex){};
}
对不起我的英语。
编辑: 我像这样再次尝试了一次。(在主线程中)它现在正在使用 cpu 的 %10。我想这就是我想要的。 :D 谢谢!
@Override
public void onDraw(Canvas c){
p.setTextSize(50);
for (int i = 0; i < GVars.size[0]/110; i++){
p.setColor(Color.argb(255,183, 33, 53));
c.drawRoundRect(new RectF(i*100+i*10, 100+5, i*100+100+i*10, 100+100+10),10,10,p);
}
p.setColor(Color.argb(255,255,255,255));
c.drawText("Test:", 0,60, p);
invalidate();
try{Thread.sleep(20);}catch (Exception ex){}
}
代码中的循环阻塞了主事件线程。相反,您应该使用 Android API 中的事件机制。具体来说,您需要覆盖 View.onDraw()
.