Android Canvas使用太多CPU

时间:2017-02-03 08:50:52

标签: android android-canvas

我正在用android中的画布制作简单 2D游戏。我认为这对我的比赛来说已经足够了。 但是使用大约%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){};
    }

抱歉我的英文。

修改 我再一次尝试过。(在主线程中)它现在使用%10的cpu。我想这就是我想要的。 :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){}
}

1 个答案:

答案 0 :(得分:1)

代码中的循环阻止主事件线程。相反,您应该使用Android API中的事件机制。具体而言,您需要覆盖View.onDraw()