Loader并不总是激活onLo完成回调

时间:2016-01-13 06:46:16

标签: android loader asynctaskloader

我使用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回调。当加载程序像这样重新启动时,片段/关闭应用程序会解决问题。

1 个答案:

答案 0 :(得分:2)

我也遇到过这种问题。我不确定LoaderManager.RestartLoader中的错误或getLoaderManager().destroyLoader(Loader_id)以及getLoaderManager().initLoader()之外的其他错误是否适用于我。

希望这有帮助。