画布帧率下降

时间:2014-02-26 17:15:30

标签: java android multithreading canvas

我有一项名为MainActivity的活动

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {
Customview cust_view;
CustomThread cust_thread;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    cust_view=new Customview(this);

    setContentView(cust_view);

    cust_thread= new CustomThread();

    cust_thread.start();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

    }

我通过扩展视图定义了一个名为Customview的自定义视图。在onDraw方法中,我绘制一个圆圈...更改它,sx co-ordinate..call invalidate。因此我的圆圈从屏幕的一边反弹到其他

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.View;

public class Customview extends View
{
Paint paint = new Paint();
float circle_x;
int mul=1;
public Customview(Context context) {
    super(context); 
}


public void onDraw(Canvas canvas)
{   
    circle_x+=2*mul;

    if(circle_x==canvas.getWidth())
        mul=mul*-1;
    if(circle_x==0)
        mul=mul*-1;

    canvas.drawCircle(circle_x, 100, 400, paint);
invalidate();
}

}

我还有一个名为CustomThread的自定义线程,它通过扩展线程来实现.Inside run()是一个EMPTY while循环,它保持循环。

public class CustomThread extends Thread{


@Override
public void run() { 

while(true)
   {

    }

                }
}

现在如果我在我的主要活动中启动线程,那么在圆圈运动过程中会出现一个帧落下...它就像..移动移动......暂停一会儿......然后再移动..并重复这一点。

如果我不启动线程,它会顺利移动。

也有些奇怪:

如果我开始线程,但这一次,如果我把

Thread.sleep(0);

在我的run()方法中,它再次平滑。

发生了什么事?

我该如何解决?

1 个答案:

答案 0 :(得分:0)

使用“invalidate();”在onDraw()对你的设备不是一个好主意,你应该用postInvalidateDelayed(20)替换;