这是我的项目:我想打印一张图片,其中包含我从USB端口收到的数据。 我目前正在使用SurfaceView,但我注意到它每秒会通过线程30次,但我想要快10倍
public void run(){
while(isItOK){
if(!holder.getSurface().isValid()){
continue;
}
Canvas c = holder.lockCanvas();
c.drawPoint(pos,50,p);
holder.unlockCanvasAndPost(c);
}
}
有没有办法提高速度,或者我必须使用GL SUraceView或其他方式?
答案 0 :(得分:1)
每次调用unlockCanvasAndPost()
时,您都在翻转缓冲区,将刚刚提取的缓冲区发送到系统图形合成器(SurfaceFlinger)。如果您绘制的点似乎闪烁,那是因为SurfaceView是双缓冲或三缓冲。
SurfaceFlinger不会从SurfaceView中删除帧,因此如果发送的速度超过设备可以显示的速度,则缓冲区队列将填满并阻塞。每次显示刷新都会显示一个新的缓冲区,通常每秒发生60次。因此,如果你画一个紧凑的循环,你将不会超过60fps。
如果您每秒接收300个样本,则构建程序的更好方法是尽快接收数据,并在每次屏幕刷新后绘制当前设置。您可以通过Choreographer类从显示屏获取回调。