在Android 3.0中提供了一个新概念Loaders,通过LoaderManager类可以很轻松的异步加载数据从Fragment或Activity 中,Loaders提供了回调机制通知最终的运行结果,有点类似AsyncTask类,但由于Loader对于并发可以用过Loader管理器统一管理,所以更适合批量处理多个异步任务的处理(当然内部仍然是多线程)。下面就让Android123一起和大家看下honeycomb中的新特性吧,对于解决多重异步I/O加快Android平板应用的运行是十分有效的。
一、LoaderManager
LoaderManager类位于android.app.LoaderManager,提供了以下几个方法:
abstract void destroyLoader(int id) //停止并移除loader通过ID
abstract void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) //打印LoaderManager的状态到一个流中
static void enableDebugLogging(boolean enabled) //启用debug记录
abstract <D> Loader<D> getLoader(int id) //返回找到的ID或没有匹配的在Loader中
abstract <D> Loader<D> initLoader(int id, Bundle args, LoaderCallbacks<D> callback) //初始化Loader使其成为活动状态
abstract <D> Loader<D> restartLoader(int id, Bundle args, LoaderCallbacks<D> callback) //启动一个新的或重启一个存在的Loader在管理器中
同时LoaderManager还有一个回调接口android.app.LoaderManager.LoaderCallbacks<D> 用于和LoaderManager交互:
abstract Loader<D> onCreateLoader(int id, Bundle args) //举例并返回一个新Loader通过ID
abstract void onLoadFinished(Loader<D> loader, D data) //当前面一个Loader已经完成时回调
abstract void onLoaderReset(Loader<D> loader) //当一个新的loader或存在的loader重启时回调
二、Loader
Loader类位于android.content.Loader<D>,整体比较复杂,主要成员有
1. 构造方法 Loader(Context context) //作为唯一实例化方法参数只有一个Context
2. Public Methods
void abandon() //高速Loader他在绑定
String dataToString(D data) //用于调试,转换一个Loader数据类的实例为字符串用于打印
void deliverResult(D data) //发送一个load注册的listener结果
void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) //打印loader状态通过给定的流
void forceLoad() //强制一个异步载入
Context getContext() //返回Context实例
int getId()
boolean isAbandoned() //判断是否已经绑定
boolean isReset() //判断是否已经重启
boolean isStarted() //判断是否已经执行
void onContentChanged() //内容变化回调
registerListener(int id, OnLoadCompleteListener<D> listener)
void reset() //重置一个Loader的状态
final void startLoading() //启动一个异步的载入从Loader的数据
void stopLoading() //停止载入
boolean takeContentChanged() String toString()
void unregisterListener(OnLoadCompleteListener<D> listener)
提供的子类 android.content.Loader.ForceLoadContentObserver 和 接口 android.content.Loader.OnLoadCompleteListener<D>
为了更清晰的表达Android开发网给出一个SDK例子完整代码,来作分析: