Android 加载图片时需要解决的问题
23 Dec 2013
需要解决的问题
无网络环境下图片不可用
- 图片的本地缓存
低配置机型,加载图像资源超内存(OutOfMemory, OoM)
- 需要合理使用内存
ListView, GridView 等控件
- 初始化或者移动过程中,列表项的重复绘制导致图片重复加载多次
- 列表快速滑动后,停止区域图像没有被快速加载
快速滑动过程中,在getView中进行图像加载逻辑,在随后view被复用于加载另外的不同的图片 前一个加载应该立即被取消,保证新的加载应该很快被执行 * 往前或往后滑动之后,反向滑动,之前已浏览过区域,等待图片重新加载
在逆向滑动后,之前的图像应该立刻被加载 * 快速滑动过程中,列表卡顿
快速滑动过程中,频繁的图像的加载,创建和释放,可能导致内存回收
缓存使用, 配额管理
- 缓存图像(Bitmap)于内存,命中缓存的图像可立刻加载,但限于 zygoate 虚拟机内存有限
- 过大的内存占用,容易造成 OOM
- 占用用户过多内存,造成用户反感
- 缓存图像(Bitmap)于内存,命中缓存的图像可立刻加载,但限于 zygoate 虚拟机内存有限
* 缓存文件于 sd 卡或者机身存储,配额管理
* 应该适度使用用户机器资源
* 应用卸载后,不应该有遗留数据
图片复用
- 比如用户头像,120x120图像下载到本地之后,如有 80x80 的需求, 无需再次下载,直接复用 120x120 图片
图片的尺寸的适配
- 如无特殊指定,可根据 ImageView 尺寸适配最合适尺寸的图
- 大部分的图片存储服务,支持通过拼接不同 url 获得不同尺寸,不同质量, 不同格式(
webp
)的图片 需要根据不同的尺寸需求,拼接不同的 url > 各图片存储拼接格式不同,此为具体的业务逻辑,应该有足够好的扩展性,支持不同的拼接方式
Follow Me on GitHub