我使用AsyncTaskLoader从web api获取数据,但由于某种原因,加载器不会始终触发onLoadFinished回调。
这是我片段中的snippt,我是如何使用装载器的。我总是重新启动loader restartLoader(...)。forceload()来更新结果。根据用户交互激活加载器。
private void getData() {
Bundle bundle = new Bundle();
bundle.putParcelable("userInput", mUserInputData);
getLoaderManager().restartLoader(CARS_LOADER_ID, bundle, carsLoaderListener).forceLoad();
}
private LoaderManager.LoaderCallbacks<List<Car>> carsLoaderListener = new LoaderManager.LoaderCallbacks<List<Car>>()
{
@Override
public Loader<List<Car>> onCreateLoader(int id, Bundle args)
{;
return new CarsLoader(getActivity(), (UserInput)args.get("userInput"));
}
@Override
public void onLoadFinished(Loader<List<Car>> loader, List<Car> data)
{
// This is not allways get called
setData(data);
}
@Override
public void onLoaderReset(Loader<List<Car>> loader)
{
}
};
即使它已经在运行,是否可以重启这样的加载器?这会导致装载机卡住的情况吗?有时加载器被激活并且它正在进行工作,但是它更新了onLoadFinished回调。当加载程序像这样重新启动时,片段/关闭应用程序会解决问题。
答案 0 :(得分:2)
我也遇到过这种问题。我不确定LoaderManager.RestartLoader
中的错误或getLoaderManager().destroyLoader(Loader_id)
以及getLoaderManager().initLoader()
之外的其他错误是否适用于我。
希望这有帮助。