400 028 6601

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

ndroidbitmapoutofmemory总结、心得


1、BitmapFactory.Options




2、以最省内存的方式读取本地资源的图片 

  1. BitmapFactory.Options opt = new BitmapFactory.Options();   

  2. opt.inPreferredConfig = Bitmap.Config.RGB_565;    

  3. opt.inPurgeable = true;   

  4. opt.inInputShareable = true;   

  5. //获取资源图片   

  6. InputStream is = context.getResources().openRawResource(resId);   

  7. BitmapFactory.decodeStream(is,null,opt);  


3、最近解决bitmap加载时out of memory的心得


游戏在加载背景图片

       要么挂在BitmapFactory. decodeStreamassets .open(path));

    要么挂在surface = Bitmap.createBitmap (surface , 0, 0,
                surface .getWidth(), surface .getHeight(), matrix, true);

ndroid bitmap out of memory总结、心得第一次尝试:看到图片是png格式的,将图片转为jpg。图片大小减少了不少。不过没多大效果。  

        原因:虽然改为jpg,加载时存储的方式会默认为ARGB_565,本来是png为ARGB_8888,占用内存会减少一半。不过开销还是很大,用createBitmap放大时,改方法是java层的实现,效率太差。

ndroid bitmap out of memory总结、心得第二次尝试:想到cocos2d-x的瓦片地图,所以将背景图片分割为9份(自己用ps切),有些效果,不会每次切换场景都会挂,但是很多的征战地图,没全部切,所以当进入没切的场景时,还是会挂。

                   原因:没有找到问题的源头,变小图了,加载时开销的内存确实减少不少。不过太多场景都去切不太实际,这样程序改变很大。可能会出现bug的风险。

ndroid bitmap out of memory总结、心得第三次尝试:配置BitmapFactory.Config的属性,使用(2)中的方式读取图片,省去createBitmap去放大图片,使用两套资源,在这些屏幕上用大图。成功解决问题。

             原因:都用了BitmapFactory.decodeStream方法读取图片,改方法直接使用native方法,用c++实现。效率果然是高。虽然当时还不知道这个原因。今天总结的时候通过源代码才理解。


新闻名称:ndroidbitmapoutofmemory总结、心得
本文链接:http://mbwzsj.com/article/gihdhe.html

其他资讯

让你的专属顾问为你服务