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

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文题目:ndroidbitmapoutofmemory总结、心得-创新互联
标题网址:http://mzwzsj.com/article/doogop.html

其他资讯

让你的专属顾问为你服务