【问题标题】:Android Studio Loaders have been deprecated as of Android P (API 28)?Android Studio Loaders 自 Android P (API 28) 起已被弃用?
【发布时间】:2019-02-28 08:10:22
【问题描述】:

我是 Android 新手,我已经完成了一些 Android 应用程序开发课程,现在我正在尝试应用我所学的知识。我为它选择了一个新闻应用程序。它将从 5-10 个来源中提取新闻并将其显示在 recyclerview 中。

我意识到我使用的课程材料已经过时。我使用 AsynctaskLoader 来处理互联网连接问题,但现在在官方 Android 文档中它说 “自 Android P (API 28) 起,加载器已被弃用。在处理 Activity 和 Fragment 生命周期时处理加载数据的推荐选项是使用 ViewModel 和 LiveData 的组合。”

我的问题是我应该转换我的代码以符合 ViewModels 和 LiveData 还是 Asynctask 处理我的任务(或任何其他建议)?正如我提到的,我只想从几个来源中提取新闻数据并将它们显示在应用程序中。看来我不需要数据存储功能。但是,目前我已经添加了两个新闻源,并且该应用程序似乎加载新闻数据有点晚。这种延迟是否与使用加载器有关?使用视图模型会加速新闻加载任务(尤其是当有很多新闻源时)?

【问题讨论】:

  • 请注意,只有框架Loaders被弃用,支持库版本的Loaders没有被弃用。
  • @ianhanniballake 支持库的源代码中的文档明确表示“已弃用”drive.google.com/file/d/1WqhpZbZUSDlQNb1SZNVmfPbIW7Y31QZy/…
  • @Raykud - 这是因为您应该按照actual source code 使用LoaderManager.getInstance(),而不是支持库加载器已被弃用。
  • @ianhanniballake 所以它没有记录。我相信它应该用注释“see”或使用新方法的参考来正确记录,比如使用支持方法的原生片段。
  • @Raykud - 根据源代码,肯定有一个指向新类的链接,所以这看起来像是 developer.android.com 上文档的显示问题 - 它看起来确实显示正确在androidx FragmentActivity documentation

标签: android android-asynctask loader android-viewmodel


【解决方案1】:

如果您已经使用 Loaders 编写了它,则没有理由急于更改它。弃用并不意味着消失。不,加载程序不会增加显着的性能损失 - 任何性能问题都会出现在您的应用程序的其他地方。

【讨论】:

    【解决方案2】:

    Loaders 很好,因为它能够处理生命周期,但不如 LiveData 和 ViewModel 高效。如果您关心性能、速度和最新,请使用 Android 架构组件(LiveData、ViewModel),另外,您不必拘泥于旧的处事系统,您可以编写一个简单的 AsyncTask 并用 ViewModel 包装它并实时数据。它像魔术一样工作,比装载机更好。有关如何在 LiveData 和 ViewModel 中包装 AsyncTask 的信息,请访问https://medium.com/androiddevelopers/lifecycle-aware-data-loading-with-android-architecture-components-f95484159de4

    【讨论】:

    • 对于我的应用程序,我认为我不需要数据库功能,我只是从互联网上获取数据并显示它。但正如我从新的 android 架构中了解到的那样,它有点针对使用数据库等......(我查看了 MVVM 模型)实际上我因此而感到困惑,因为我不需要数据库功能。
    • 请注意,如果您真的想将数据库与 Android 架构组件一起使用,您可以将 ViewModel 和 LiveData 与 ROOM 一起使用。 Room 是 Android 架构组件中处理数据库的另一部分,如果您使用 Room,您可以完全忘记 Contents Provider。
    • 请注意,AAC 不是专为数据库设计的,它是为运行后台任务而设计的,例如网络、数据库等,
    【解决方案3】:

    自 Android P (API 28) 起,加载程序已被弃用。在处理 Activity 和 Fragment 生命周期时处理加载数据的推荐选项是结合使用 ViewModel 和 LiveData。 ViewModel 可以像 Loaders 一样在配置更改中幸存下来,但样板文件更少。 LiveData 提供了一种生命周期感知方式来加载您可以在多个 ViewModel 中重用的数据。您还可以使用 MediatorLiveData 组合 LiveData,任何可观察的查询,例如来自 Room 数据库的查询,都可用于观察数据的变化。 ViewModels 和 LiveData 在您无法访问 LoaderManager 的情况下也可用,例如在服务中。将两者结合使用可以轻松访问应用所需的数据,而无需处理 UI 生命周期。

    【讨论】:

      猜你喜欢
      • 2019-07-30
      • 2019-03-09
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多