ndroid bitmap out of memory总结、心得

发布时间:2020-08-16 17:29:30 作者:wo153
来源:网络 阅读:447

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. decodeStream( assets .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++实现。效率果然是高。虽然当时还不知道这个原因。今天总结的时候通过源代码才理解。


推荐阅读:
  1. IOS Socket的请求中的图片,音频等的传输
  2. 怎么处理图片过大问题?如何把图片压缩到最小

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

图片 分辨率 memory

上一篇:数据科学家需要掌握的十大统计技术详解

下一篇:配置ASM以及创建恢复目录

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》