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