您的位置:首页 > 移动开发 > Android开发

android 加载器loadermanager.initLoader方法的注意事项

2012-09-12 23:22 531 查看
@SuppressWarnings("unchecked")
public <D> Loader<D> initLoader(int id, Bundle args, LoaderManager.LoaderCallbacks<D> callback) {
if (mCreatingLoader) {
throw new IllegalStateException("Called while creating a loader");
}

LoaderInfo info = mLoaders.get(id);

if (DEBUG) Log.v(TAG, "initLoader in " + this + ": args=" + args);

if (info == null) {
// Loader doesn't already exist; create.  如果不存在就重新创建一个
info = createAndInstallLoader(id, args,  (LoaderManager.LoaderCallbacks<Object>)callback);
if (DEBUG) Log.v(TAG, "  Created new loader " + info);
} else {
if (DEBUG) Log.v(TAG, "  Re-using existing loader " + info);
//如果存在就将其callback赋值
info.mCallbacks = (LoaderManager.LoaderCallbacks<Object>)callback;
}

if (info.mHaveData && mStarted) {                         如果有值并且已经启动,则是已经完成
// If the loader has already generated its data, report it now.
info.callOnLoadFinished(info.mLoader, info.mData);
}

return (Loader<D>)info.mLoader;
}

下面是createAndInstallLoader的源代码

private LoaderInfo createAndInstallLoader(int id, Bundle args,
LoaderManager.LoaderCallbacks<Object> callback) {
try {
mCreatingLoader = true;
LoaderInfo info = createLoader(id, args, callback);
installLoader(info);
return info;
} finally {
mCreatingLoader = false;
}
}
下面是installLoader的源代码

void installLoader(LoaderInfo info) {
mLoaders.put(info.mId, info);
if (mStarted) {
// The activity will start all existing loaders in it's onStart(),
// so only start them here if we're past that point of the activitiy's
// life cycle
info.start();
}
}
注意上面的英文翻译,只有在Activity的OnStart以后才会执行此方法,因此我们在执行loadermanager的initLoader方法的时候也需要在onstart以后执行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: