使用应用程序 class 作为配置更改的 hack-workaround 是否可以接受?
Is using the Application class as a hack-workaround for configuration changes acceptable?
我发现在一些棘手的情况下,扩展应用程序 class 并使用它来保存引用和值可能会有所帮助,否则很难通过配置更改在生命周期中进行协调。
这样做有什么真正的缺点吗?我不禁觉得这是 "too easy" 一个修复,这意味着可能有一些我没有考虑到的主要缺点。
我要把你的问题分解成两个子问题。
Is there any real downside to [storing information in a static scope]?
一些问题包括:
内存泄漏
线程安全,如果有多个线程可能会命中静态值
内存泄漏
处理 N 个可能的值,在您可能需要 N 个可能值的情况下(例如,某些 activity 的多个实例,每个实例都需要一个不同的值)
内存泄漏
与保留的片段和 onRetainNonConfigurationInstance()
一样,此解决方案对最近任务的进程终止和恢复没有帮助,而 onSaveInstanceState()
Bundle
对此有帮助太
我有提到内存泄漏吗?
有助于缓解其中一些问题的常见模式包括:
将静态值视为大小有限的缓存(例如,LRUCache
)
使用事件总线而不是您自己的静态值
Is there any real downside to [using Application
as a static scope, as opposed to just an ordinary static
field somewhere]?
只有一个 Application
实例。通常,与常规 static
字段相比,它的价值很小。而且,因为各种图书馆都希望您使用 他们的 "special snowflake" Application
基础 class,所以您尝试将自己的东西混入其中的次数越少,您将来 运行 发生碰撞的可能性较小。
我发现在一些棘手的情况下,扩展应用程序 class 并使用它来保存引用和值可能会有所帮助,否则很难通过配置更改在生命周期中进行协调。
这样做有什么真正的缺点吗?我不禁觉得这是 "too easy" 一个修复,这意味着可能有一些我没有考虑到的主要缺点。
我要把你的问题分解成两个子问题。
Is there any real downside to [storing information in a static scope]?
一些问题包括:
内存泄漏
线程安全,如果有多个线程可能会命中静态值
内存泄漏
处理 N 个可能的值,在您可能需要 N 个可能值的情况下(例如,某些 activity 的多个实例,每个实例都需要一个不同的值)
内存泄漏
与保留的片段和
onRetainNonConfigurationInstance()
一样,此解决方案对最近任务的进程终止和恢复没有帮助,而onSaveInstanceState()
Bundle
对此有帮助太我有提到内存泄漏吗?
有助于缓解其中一些问题的常见模式包括:
将静态值视为大小有限的缓存(例如,
LRUCache
)使用事件总线而不是您自己的静态值
Is there any real downside to [using
Application
as a static scope, as opposed to just an ordinarystatic
field somewhere]?
只有一个 Application
实例。通常,与常规 static
字段相比,它的价值很小。而且,因为各种图书馆都希望您使用 他们的 "special snowflake" Application
基础 class,所以您尝试将自己的东西混入其中的次数越少,您将来 运行 发生碰撞的可能性较小。