loader

loader 是Android 3.0之后引入的API,可以在activity 或者 fragment中方便的异步装载数据.而且可以monitor 数据,当monitor的数据更新是返回最新的结果。
如何开始一个loader呢?
一般在activity 或者fragment 中用loader的话,先通过getLoaderManager().initLoader(0, null, this);
public <D> Loader<D> initLoader(int id, Bundle args, LoaderManager.LoaderCallbacks<D> callback) {
599        if (mCreatingLoader) {
600            throw new IllegalStateException("Called while creating a loader");
601        }
602
603        LoaderInfo info = mLoaders.get(id);
604
605        if (DEBUG) Log.v(TAG, "initLoader in " + this + ": args=" + args);
606
607        if (info == null) {
608            // Loader doesn't already exist; create.
609            info = createAndInstallLoader(id, args,  (LoaderManager.LoaderCallbacks<Object>)callback);
610            if (DEBUG) Log.v(TAG, "  Created new loader " + info);
611        } else {
612            if (DEBUG) Log.v(TAG, "  Re-using existing loader " + info);
613            info.mCallbacks = (LoaderManager.LoaderCallbacks<Object>)callback;
614        }
615
616        if (info.mHaveData && mStarted) {
617            // If the loader has already generated its data, report it now.
618            info.callOnLoadFinished(info.mLoader, info.mData);
619        }
620
621        return (Loader<D>)info.mLoader;
622    }
第一个参数id 是用于和loaderInfo 映射,其中mLoader是一个SpareArray数据。从initLoader中可以看到如果没有从mLoader中查到LoaderInfo的话,则info==null 这个条件成立,则调用createAndINstallLoader建立一个新的LoaderInfo。并通过createAndINstallLoader->installLoader 中调用mLoader.put(info.id,info).来建立新的id和info的映射。
第二个个参数args 会保存到LoaderInfo中。
第三个参数一般传this,因为activity 一般会实现LoaderManager Callbacks.
LoaderManager.LoaderCallbacks 有三个接口分别如下:
onCreateLoader() — 用给定的id创建一个新的loader
onLoadFinished() — 当数据完成加载时
onLoaderReset() — 重启一个loader
如果创建LoaderInfo后,需要monitor的数据已经产生则会在618行调用LoaderManager Callbacks  onLoadFinished。
重启loader:
有时候你想丢弃就的数据重启loader,可以调用下面的接口
getLoaderManager().restartLoader(0, null, this);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值