SurfaceView双缓冲测试
来源:互联网 发布:赤月传说2进阶数据 编辑:程序博客网 时间:2024/05/16 14:09
这是在进行SurfaceView脏矩形绘制研究之前的一个小测试。
安卓SurfaceView主要在工作线程中更新视图,使用双缓冲机制。
因为绘制到设备的时间远小于保存到内存的时间,所以把所有图元统一绘制到内存,然后再统一绘制到设备,能够优化显示速度。
找了一些SurfaceView的资料,意思大概如下:
绘制第一帧使用buffer1,当unlock之后,绘制buffer1到设备,
绘制第二帧使用buffer2,unlock之后绘制buffer2到设备,
绘制第三帧使用buffer1,
如此循环。。。
写了测试代码:
public class DirtyRectActivity extends BaseActivity implements SurfaceHolder.Callback{private SurfaceView mSurfaceView;private SurfaceHolder mSurfaceHolder;private WorkThread mThread = new WorkThread();@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_dirty_rect);mSurfaceView = (SurfaceView)findViewById(R.id.surface);mSurfaceHolder = mSurfaceView.getHolder(); mSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); mSurfaceHolder.addCallback(this);}public class WorkThread extends Thread{private boolean mStop = false;private int mFrame = 0;public void run() {while (!interrupted() && !mStop) {try {sleep(1000);} catch (InterruptedException e) {}draw(mFrame++);}};public void stopThread(){mStop = true;try {join();} catch (InterruptedException e) {}}}private void draw(int frame){Paint paint = new Paint();paint.setColor(Color.parseColor("red"));paint.setTextSize(16f);Canvas canvas = null; try { canvas = mSurfaceHolder.lockCanvas(); String text = ""+frame; canvas.drawText(text, 20*frame, 111, paint); } catch (Exception e) { } finally{ if (canvas != null){ try { mSurfaceHolder.unlockCanvasAndPost(canvas);} catch (Exception e2) {} } }}@Overridepublic void surfaceCreated(SurfaceHolder holder) {mThread.start();}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {mThread.stopThread();}}
执行效果:
这个是其中一个的效果。
在我手机上测试,效果是2帧交替使用,看来SurfaceView使用的buffer数目在不同设备上不是统一的。
0 0
- SurfaceView双缓冲测试
- SurfaceView双缓冲
- SurfaceView双缓冲Demo
- SurfaceView 双缓冲应用
- SurfaceView 双缓冲应用
- SurfaceView双缓冲Demo
- 双缓冲绘图与SurfaceView(二):SurfaceView
- Android SurfaceView 双缓冲机制
- surfaceview 双缓冲的理解
- Android SurfaceView双缓冲绘图
- SurfaceView的双缓冲机制
- Android SurfaceView双缓冲绘图
- Android 的 SurfaceView 双缓冲应用
- Android 的 SurfaceView 双缓冲应用
- 在SurfaceView中使用双缓冲
- Android之SurfaceView 双缓冲应用
- Android 的 SurfaceView 双缓冲应用
- Android 的 SurfaceView 双缓冲应用
- java中过滤器、监听器、拦截器的区别
- 归并排序
- Intent.ACTION_PICK
- c#---HashSet对类的判重
- 让百度删除不想收录的域名或快照的最快方法
- SurfaceView双缓冲测试
- PAT (Advanced Level) Practise 1080 Graduate Admission (30)
- c++中的c_str()函数的作用是
- Spring Mvc添加验证码
- 找到Host地址
- 来段代码提提神-Java实现图片压缩方法 一
- SAS Error: sas went to a new line when input ...
- angular单元测试与自动化UI测试实践
- ConcurrentHashMap源码解析