不建议使用的getSupportLoaderManager的合适替代品是什么?

时间:2018-07-18 17:44:39

标签: android loader android-loadermanager asynctaskloader

我在Android Studio中获得了不赞成使用getSupportLoaderManager的信息。但我想打电话:

getSupportLoaderManager().initLoader(0, null, mRecipeLoaderManager);

该通话的替代方法应该是什么? 还是可以不用担心使用getSupportLoaderManager?

6 个答案:

答案 0 :(得分:8)

如此处所述:Loaders

“从Android P(API 28)开始不推荐使用加载器。在处理Activity和Fragment生命周期时,处理加载数据的推荐选项是结合使用ViewModels和LiveData。”

每当您看到不推荐使用的东西时,请直接访问开发人员站点并查看所需的类或函数,他们已经将其标记为deprecated,并且会有更好的选择。

答案 1 :(得分:7)

不建议使用此方法的原因是,加载器已脱离其历史记录FragmentFragmentActivity的实现,以便生活在自己的库中,该库将很快成为可选的依赖项,及其实现已在体系结构组件的顶部进行了重写。

检索LoaderManager实例的非捆绑方式是使用静态工厂方法:

LoaderManager.getInstance(T)

其中TLifecycleOwnerViewModelStoreOwner的实例(主要实现是FragmentActivityFragment)。

答案 2 :(得分:6)

如果需要,您仍然可以使用getSupportLoaderManagerandroid.support.v4.app.LoaderManager.getInstance(this).initLoader(0, null, this).forceLoad();

答案 3 :(得分:3)

我发生了同样的问题!

getSupportLoaderManger()可以替换为LoaderManager.getInstance(this),其他代码保持不变。因此,最终您的代码将变为:

LoaderManager.getInstance(this).initLoader(0, null, mRecipeLoaderManager);

您可以参考Android官方文档: https://developer.android.com/reference/androidx/fragment/app/FragmentActivity#getSupportLoaderManager()

答案 4 :(得分:2)

这里您有一个简短的说明,说明如何用ViewModel替换Loader:

https://developer.android.com/jetpack/arch/viewmodel#loaders

我认为图形是不言自明的:

enter image description here

enter image description here

有关更详尽的解释,请阅读此博客文章:

https://medium.com/google-developers/lifecycle-aware-data-loading-with-android-architecture-components-f95484159de4

答案 5 :(得分:2)

我也遇到了这个问题,这段代码为我解决了问题data[j][i+1] = expDelivery;

我希望对您有帮助