- 注册时间
- 2004-8-29
- 最后登录
- 1970-1-1
|
发表于 2009-10-7 23:43:43
|
显示全部楼层
初略估计,这个update的实现会使程序运行效率降低一半以上。
因为里面
1.每次生成一个不必要的IntBuffer,这个buffer的内部实现应该包含了一个int数组,这样每次生成一个160*80的int数组,不仅效率低下,还会对GC带来很大的负担。
2.从mBuffer拷贝数据到buffer,然后再从buffer拷贝数据到mBitmap,这里至少做了一半的无用功。
事实上只需直接拷贝一部分mBuffer的数据到mBitmap即可
当然,我只看了这一部分代码;另一方面我没写过Android的程序,也许考虑的不对;
但如果没弄错的话,只需要将update的代码去掉,将与mDirty相关的代码去掉,然后修改ScreenPane构造函数的代码为:- public ScreenPane(JGVM gvm) {
- mBitmap = Bitmap.createBitmap(ScreenModel.WIDTH, ScreenModel.HEIGHT, Bitmap.Config.ARGB_8888);
- gvm.setColor(0xff000000, 0xffffffff);
-
- mBufferRect = new Rect(0, 0, ScreenModel.WIDTH, ScreenModel.HEIGHT);
- setSize(ScreenModel.WIDTH, ScreenModel.HEIGHT);
-
- gvm.addScreenChangeListener(new ScreenChangeListener() {
-
- public void screenChanged(ScreenModel screenModel, Area area) {
- screenModel.getRGB(mBuffer, area, 1, 0);
- mBitmap.copyPixels(mBuffer,0,ScreenModel.WIDTH,area.getX(),area.getY(),area.getWidth(),area.getHeight);
- canvas.drawBitmap(mBitmap, ....); //这里没去看文档了,大概是这样使用吧
- }
-
- });
- }
复制代码 这样性能应该可以提高一倍以上。 |
|