- 优化图片加载过程,将加载过的图片根据采样率压缩后缓存到LruCache,并将原图缓存到DiskLruCache中,对于磁盘读取图片和网络读取图片,使用了线程池来并发读取,再由Handler设置到ImageView中
- 解决了列表错位问题,在设置图片之前会根据url来判断item是否发生了复用,如果发生了复用就不设置图片
- 为了避免滑动时产生太多线程,所以监听了GrdView的滑动,当滑动停止时才加载图片
- 之前对复用的item中的imageView用占位图替换,此次将其更改为优先读取内存中缓存的缩略图,如果没有缓存才使用占位图
- 扩大了内存缓存的容量,使其能够缓存全部缩略图
- 增加大图功能,显示大图时会优先从磁盘中读取缓存的原图,若没有原图再从网络中读取图片
- 删除无效的url
- 采用api接口代替原先的url数组
- 将项目解耦成MPV模式
- 采用瀑布流+卡片式布局的形式,在图片下方显示图片信息,支持上拉加载数据,支持卡片拖拽操作
- 将图片的压缩策略由长宽相等改为按比例缩放
- 将原来的HttpUrlConnection替换成OkHttpConnection,并增加对连接超时的处理
- 更改线程池配置,为了适应IO密集型工作,让更多线程能响应IO请求,将核心线程数增加到2*CPU,总线程增加到Integer.MAX_VALUE,阻塞队列长度限制为10,线程闲置时间减小为5
原本是线程池采用的是无界的阻塞队列,当访问到失效的url时,由于核心线程数有限,新的IO请求被加入到阻塞队列中,而核心线程一直阻塞导致新的任务无法执行,会出现需要从磁盘中读取缓存的图片无法显示
- 在退出activity时请求gc,因为测试的小米手机在退出后不会立刻执行gc,反复打开activity可能会导致OOM
- 新版本更新功能:新增共享相册功能,实现新建相册、打开相册与从本地相册中上传图片等功能
- 修复图片加载过程中点击大图闪退的问题
- 修复图片显示位置错乱以及footer异常的问题
- 对内存进行优化,在显示本地图片时对图片进行高效加载,以及及时释放bitmap来避免OOM异常
- 对ImageLoader进行扩展:
- 首次创建ImageLoader时可指定线程池,内存缓存大小和磁盘缓存大小
- 除了bindBitmap外,还支持从内存缓存、磁盘和网络中读取图片
- 增加了TaskOptions,可自由配置加载图片的选项,如Options、reqHeight、reqWidth、Bitmap的最大尺寸和对连接超时的处理等
- 对ImageResizer进行扩展:
- 优化了压缩图片的算法,除了通过采样率对图片的尺寸进行缩放外,通过Matrix进一步将图片压缩到指定的尺寸,并将图片居中显示
- 根据maxSize参数压缩图片,使图片大小不超过maxSize
- 增加了对图片质量压缩的方法,可用于图片上传或图片的无损压缩
- 增加运行时权限以适配6.0以上的版本
- 上传的图片不能大于2M
- 其他问题:诸如对reqHeight/reqWidth的值进行修正,cursor没有关闭,loadBitmapFromDisk没有在子线程调用,相册列表在滑动时优先从内存缓存中加载缩略图等
- ImageLoader
- 图片最终尺寸不能大于reqWidth、reqHeight,如果要对图片进行放大,可以使用ImageView的minHeight和minWidth
minWidth和minHeight是基于drawable变换的,所以不会对bitmap大小进行改变
- 当同时指定尺寸和maxSize,优先考虑尺寸
- 目标图片不能由原图片按比例缩放得到,其裁剪方式将由SCALE_TYPE决定
- PasswordDialog
- 将公用逻辑抽象出来,提高其可复用性和可扩展性,使其适用于不同登陆场景
- 将“随便看看”功能集成到打开相册中
- UI
- 遵循Material Design;为FAB自定义一个Behavior,在上滑时将其隐藏
- 解决瀑布流Item跳动的问题
- 为瀑布流的ImageView指定minHeight,降低了瀑布流重新布局时调整的幅度
- 功能
- 增加下拉刷新功能,这也修复了上传图片后显示图片会重复的问题
- 图片加载失败时可以点击重试
- 功能:记录浏览过的相册,以ViewPage+TabLayout+Fragment的形式展示相册,可以在管理界面中进行管理或打开新相册
- UI:
- 相册界面:
- 修复了加载完数据后footer不消失的问题;
- 修复了相册列表刷新失败之后从第一页开始请求数据的问题
- 当没有更多数据、加载错误、正在加载时上滑不会加载数据;
- 取消了图片列表的占位图;
- 消除显示大图的白边;
- 选择本地图片界面:
- 解决数字显示异常问题;
- 打开bucket list时定位到选定位置,切换bucket时定位到photo list顶部
- 将Presenter和Model交互的逻辑抽象到基类中
- 重构ImageLoader,新增以下功能:
- DecodeOption增加priority字段,可以指定任务的优先级,比如大图可以优先加载
- DecodeOpion增加shouldResized字段,对于没有大图的资源,用户可以跳过内存缓存中压缩过的图片而根据指定的尺寸重新加载图片
- ImageLoader支持从本地路径加载图片
- ImageLoader支持预加载缩略图
- 重构详情页界面,丰富详情页功能