Android图片加载 - 课件

导入

这是红岩Android第二学期的课件,主要讲解Android图片加载。

图片加载的可能性

From

  1. 资源文件
  2. 磁盘文件
  3. 网络

To

  1. ImageView及其子View
  2. Bitmap/Drawable
  3. File

Error

  1. OOM : Out Of Memory
  2. 并发 : 错位
  3. 线程 : 过多线程和线程切换

基本的图片加载

To ImageView as Glide

Glide的加载方案

Glide加载图片只需要一句话: Glide.with(context).load(url).into(view);
可选配置是通过.apply传递option对象

模仿设计草稿

此处应该有代码,动手

模仿设计结果

  1. with -> 构建manager对象

  2. apply -> 设置option对象为配置方案

  3. load -> 构建对象获取Bitmap

  4. into -> 设置目标

处理问题

线程控制

上节课讲过了

OOM

图片是个大东西,不应该全部存在内存里,应该在适当的时候被回收

引用

强引用,软引用,弱引用,虚引用

错位

  1. 同一个View,前后要求加载不同图,一定被后加载好的图片覆盖导致的错乱

  2. RecycleView 之类列表View,出于重新实例View的消耗过大,采取了重用View的策略

标记 (TAG)

Android原生提供的给View设置标记的方法

扩展

  1. 计算器

  2. setTag (int key, Object tag) 方法可以保存多个tag,但是要求key为resources的id

进阶

占位图 (Place,Error)

  • 图片加载前,给用户正在加载的提示
  • 图片加载失败,给用户提示
  • 占位,保持布局稳定

压缩图片

理论上不但应该支持多种压缩策略,还应该支持自定义压缩策略,线性连续压缩,上限压缩

按大小剪切

根据ImageView的大小

图片质量

在不影响显示效果的前提下压缩

缓存

三级缓存中两层为本地,内存->磁盘

Android磁盘应用数据位置
Android磁盘外置缓存位置

context.getExternalCacheDir().getPath()

加密文件名

保证私密性,不将图片暴露给用户

  • MD5加密

    Message Digest algorithm 5,信息摘要算法

  • SHA加密

    Secure Hash Algorithm,安全散列算法

对于列表优化

  1. 后请求先加载

  2. 滑动停止加载

文章目录
  1. 1. 导入
  2. 2. 图片加载的可能性
    1. 2.1. From
    2. 2.2. To
    3. 2.3. Error
  3. 3. 基本的图片加载
    1. 3.1. Glide的加载方案
    2. 3.2. 模仿设计草稿
    3. 3.3. 模仿设计结果
  4. 4. 处理问题
    1. 4.1. 线程控制
    2. 4.2. OOM
      1. 4.2.1. 引用
    3. 4.3. 错位
      1. 4.3.1. 标记 (TAG)
  5. 5. 进阶
    1. 5.1. 占位图 (Place,Error)
    2. 5.2. 压缩图片
      1. 5.2.1. 按大小剪切
      2. 5.2.2. 图片质量
    3. 5.3. 缓存
      1. 5.3.1. 加密文件名
    4. 5.4. 对于列表优化