android图片导致bin文件夹和apk很大

来源:互联网 发布:中国电信cn2网络 编辑:程序博客网 时间:2024/05/01 14:38

最近帮别的企业做android开发,居然解开了我多年来对outofmemoryError(OOM错误)的心结。

插一段废话,我刚毕业在一个听说是跟军方有合作的公司里做android的app,接手的第一个项目是一个已经做完的项目,我做项目的跟进和改进工作。 那时候app要发布了,却遇到了一个非常严重的问题,项目会保存摄像头返回的图片,当图片超过3幅的时候,会报OOM异常。我记得当时图片的分辨率是2K,也就是2048*1536左右。这个OOM错误连之前的项目经理都说,可能需要做更多调试才能确定原因。他们之前也遇到过类似的错误,但是一直没有很好的解决。都是用避开的方式。

这次我用的是小米平板来测试,按道理来说,现在是3年之后了,设备的性能提升很大,小米平板的分辨率本身就是2048*1536,应该可以流畅打开和读取图片。但是我们把3个2k的图片放进去,却发现突然设备的编译时间增大了很多,而且编译好直接就报oom错误。当时我们马上就要跑去客户那边跟客户谈app了,遇到这个错误,我心理其实很震惊。连以前经理都想要避开的错误,今天又被我遇上了。

后来的测试发现从放了那3个2k的文件之后,apk的文件从139M迅速变成了390m。而且编译好的文件即使可以安装到手机,打开的时候,也很容易报OOM错误。开始的时候以为是其他代码导致的错误。

这篇文章对我的启发很大:http://www.jb51.net/article/47458.htm

文章的结论是:图片对内存的占用只跟图片的分辨率和色彩模式有关。

后来细心想想,才顿悟,导致我apk突然变得这么大的原因,会不会是内存呢?

之后我的测试,把2048*1536的分辨率变成1024*773,居然编译速度快了很多,而且编译出来的apk马上变成140M左右,bin文件夹也小了很多。

这么多年一直放在心里的大疑惑终于解开了,原来导致OOM错误的元凶,很多时候,正是我们放进去的大图片本身,而不是bitmapfactory方法。

希望这个重要的经验可以给更多的开发者看到,避免大家再犯在同样错误。


0 1
原创粉丝点击