【问题标题】:What are alternatives to storing variables in Application class?在 Application 类中存储变量的替代方法是什么?
【发布时间】:2019-01-17 20:02:59
【问题描述】:

虽然通常不建议使用扩展 Application 的类,但有哪些替代方法可以存储需要跨线程全局访问的变量?

SharedPreferences 无法选择,因为它的物理存储和频繁访问会导致性能问题

示例:一个购物应用,在 Application 类中保存有关上次查看产品的 int 值。该变量在视图回收器 onBindViewHolder 方法中使用,因此无法使用 SharedPreferences 访问它,因为它会在滚动时屏幕冻结

我现在知道的唯一方法是将它传递给构造函数参数,这很不错,因为它可能导致非常奇怪的构造函数参数,或者通过意图并不总是可行的解决方案(你好适配器)

【问题讨论】:

  • 您保存了哪些信息?数据列表?为什么共享首选项不理想?
  • “虽然通常不建议使用扩展应用程序的类”此语句基于什么?
  • 因为Android是“智能”的,一旦设备资源不足,他可以从Application类释放数据。还有更多github.com/codepath/android_guides/wiki/…
  • Android 从不“一旦设备资源不足,就会从 Application 类中释放数据”。它与 Application 类一起杀死了整个 Linux 进程。在这种情况下,您应该考虑永久存储,例如SharedPrefs。

标签: android global-variables


【解决方案1】:

有哪些替代方法可以存储需要跨线程全局访问的变量?

  • static 字段,最好是单例
  • 依赖注入的单例(例如 Dagger 2、Koin)

虽然通常不建议使用扩展应用程序的类

仅使用Application 子类来存储全局数据是没有意义的——单例是更好的选择。自定义Application 子类适用于每个进程的初始化,例如设置依赖注入框架、连接崩溃日志等。

【讨论】:

    猜你喜欢
    • 2019-05-22
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 2023-04-05
    • 2014-06-21
    • 1970-01-01
    • 2010-10-10
    相关资源
    最近更新 更多