Android Bitmap创建与绘制速度差异原因求助及经验分享
关于Android文件读取与Bitmap加载的性能差异经验分享
其实这更像是给同行的踩坑经验,而非纯粹的疑问(我至今没完全搞懂为什么会出现这么明显的速度差),主要是想帮到那些遇到类似问题的Android开发者。
大概5-7年前,我刚入门Android编程时写了个自用代码库,里面包含两个核心函数:
- 一个是通用文件读取函数:负责把任意文件的内容读取到内存中,支撑了好几个功能模块的IO操作
- 另一个是Bitmap加载函数:专门从
.png文件加载Bitmap,当时图省事,直接调用了前面那个通用文件读取函数——先把文件字节读进内存,再转成Bitmap
后来偶然测试性能时发现,自己写的这个Bitmap加载方法,比Android原生的BitmapFactory.decodeFile()慢了2-3倍!我当时折腾了好久排查原因:
- 检查通用读取函数的IO逻辑,用的是
BufferedInputStream,缓冲大小也反复调整过,没发现明显漏洞 - 对比字节转Bitmap的解码过程,和原生方法的逻辑看起来也没本质区别
直到现在我也没完全搞懂速度差异的根源,但这个教训挺值得分享:不要盲目复用通用IO函数处理特定场景的资源加载,系统原生API往往做了很多底层优化(比如BitmapFactory可能直接和底层图形库交互,跳过了一些用户态的内存拷贝步骤),效率比手写的通用方法高得多。
如果你们也在做Bitmap加载相关的开发,真心建议直接用系统提供的BitmapFactory系列方法,别像我当初那样为了省事踩坑。
内容的提问来源于stack exchange,提问作者Everett Kaser
相关产品推荐
相关产品推荐

