Loader 并不总是触发 onLoadFinished 回调

Loader is not allways firing onLoadFinished callback

我正在使用 AsyncTaskLoader 从 Web 获取数据 api 但由于某些原因,加载程序并不总是触发 onLoadFinished 回调。

这是我的 Fragment 的片段,说明我如何使用加载程序。我总是重启加载器 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)
    {
    }
};

即使已经是运行,也可以这样重启loader吗?这会导致装载机卡住吗?有时加载器被正常触发并且它正在做工作,但它更新时触发 onLoadFinished 回调。当加载程序像这样卡住时,重新启动片段/关闭应用程序可以解决问题。

我也遇到过这种问题。我不确定它在 LoaderManager.RestartLoader 中的错误还是 getLoaderManager().destroyLoader(Loader_id) 中的错误,然后 getLoaderManager().initLoader() 对我有用。

希望对您有所帮助。