弃用的getSupportLoaderManager的适当替代者是什么?

fab*_*abi 15 android loader asynctaskloader android-loadermanager

我在Android Studio中获得了不推荐使用getSupportLoaderManager的信息.但是我想打个电话:

getSupportLoaderManager().initLoader(0, null, mRecipeLoaderManager);
Run Code Online (Sandbox Code Playgroud)

该电话的替代方案应该是什么?或者我仍然可以使用getSupportLoaderManager而不用担心?

Bla*_*der 9

之所以不推荐使用此方法,是因为Loader已脱离其历史记录FragmentFragmentActivity实现,以便生活在自己的库中,该库很快将成为可选的依赖项,并且其实现已在体系结构组件上进行了重写。

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

LoaderManager.getInstance(T)

T的实例在哪里(主要实现是和)。LifecycleOwnerViewModelStoreOwnerFragmentActivityFragment

  • 因此,在我的AppCompatActivity中(实现LoaderManager.LoaderCallbacks <Cursor>),我要做的只是用LoaderManager.getInstance(this)代替getSupportLoaderManager(),这样我就可以离开了onCreateLoader(),onLoadFinished()和onLoaderReset()方法未更改? (3认同)

Kav*_*bhu 8

如上所述:装载机

"从Android P(API 28)开始,已经弃用了加载程序.在处理Activity和Fragment生命周期时处理加载数据的推荐选项是使用ViewModels和LiveData的组合."

每当您看到某些内容被弃用时,请直接访问开发人员网站,查看您正在查找的类或功能,并且已经将其标记为deprecated并且将有更好的替代方案.

  • @fabi只需看看本页开头的蓝色大注.此次调用没有1比1替换,一般不推荐使用加载器. (3认同)

amo*_*win 8

我也有这个问题,这段代码为我解决了 LoaderManager.getInstance(this).initLoader(0,null,mRecipeLoaderManager);

我希望它会有所帮助


Moh*_*adL 7

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

  • @Amrut它删除折旧,因为它使用支持库v4.如果您仍想使用Loader,这是正确的方法.否则,您应该使用ModelView而不是Loader. (3认同)
  • 这似乎删除了弃用警告,但这是正确的方法吗? (2认同)
  • 如果您想使用 Loader,则无需这样做:您只需使用它即可。如果您想抑制弃用消息,那么*正确的方法*是在语句之​​前使用 @SuppressWarnings("deprecation") 注释。 (2认同)

Fra*_*zoa 5

这里有一个关于如何用 ViewModel 替换 Loaders 的简要说明:

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

那里的图形不言自明,我认为:

在此处输入图片说明

在此处输入图片说明

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

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