介绍一个提高 Android ListView 或 GridView 的 Smoothie 库
翻译 By Long Luo
原文链接:Introducing Smoothie
Pattrn UI 中的很大一部分是在滑动时从云端获取图片列表。所以我花了相当长的一段时间去调试,以获得滑动时的体验尽可能的流畅。在过去的几周里,我一直在试图解耦代码,完成了一个很小的库:Smoothie 。
Smoothie 提供了一个简单的 API 来异步加载 ListView/GridView 的项目,以和 UI 线程分离。它做了所有你所期望做的事情,加载项目变得可见,取消要求回收的 View 对应的项目等。但它所完成的还不止这些。
Smoothie是手势识别:在Fling手势时,它会必须发起加载项目请求;在滑动列表时,当你的手指按下时,将会启用增量加载项目请求。此外,它支持当前屏幕外项目预加载功能,当你滑动时,可以减少加载占位符类型的项目数。说穿来,Smoothie使用了一个支持可以阻塞队列动态优先执行的的线程池。在屏幕上滑动时,屏幕外即将可见的项目加载请求将动态的获取更高的优先级。
那么,怎么使用它呢?很简单:
首先在你的布局文件中增加一个 AsyncListView 或者 AsyncGridView ,只需要增加一个额外传递的方法到响应的父类中。
然后实现一个和你的应用程序加载和显示项目逻辑一致的 ItemLoader 。你将需要重写下面四种方法: getItemParams() , loadItem() , loadItemFromMemory() 以及 displayItem() 。
最后在 ItemLoader 中建一个 ItemManager ,同时把它和目标 AsyncListView 或者 AsyncGridView 关联起来。
在你的 ListView/GridView 控件需要异步加载时,考虑下把Smoothie作为你的轻量骨架。您可以轻松地连接您自己的图像加载/缓存框架在里面。例如,一个典型的示例应用, Android-BitmapCache 实现了 ItemLoader 使用一个简单的淡入淡出的动画来显示图像。
除了在代码中的 API 文档,还可以看看 App 示例,一边更好地了解如何使用该库。请记住, API 是不是最终版本哦。目前反响是非常好的!
Enjoy it:-)
文章修改历史
- Long Luo at AM11:30 ~ 12:42 Feb. 15th, 2014 @Shenzhen, China.
- 修改图片链接 2024.03.03 in Shenzhen.