gpt4 book ai didi

android - Android 上基于枚举的单例的生命周期

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:29:43 24 4
gpt4 key购买 nike

几天前,我发现单例可以成为 Android 中的反模式。我的单例(具有私有(private)构造函数和存储在静态字段中的实例的类)被删除(实例被删除,尽管事实上其他 Activity 仍在使用这个单例(通过 getInstance() 方法)所以必须创建另一个实例)因为它的 Activity 第一次调用被删除(仅在为这个 Activity 调用完成之后)。

我已经阅读了如何解决这个问题,但是我也刚刚阅读了“Effective Java”。据说“单元素枚举类型是实现单例的最佳方式”。

所以现在我想知道在 Android 应用程序中以这种方式创建的单例的生命周期是什么?它是否与“标准单例实现”的情况相同,所以在销毁第一次调用它的 Activity 后,它将被销毁(即使它也用于其他 Activity )?

我不是在询问正确的 android 单例实现或单例模式本身(它是模式还是反模式等),但我想知道这种枚举单例对象的生命周期是什么以及何时销毁.

最佳答案

在所有情况下,您使用的类都绑定(bind)到加载它们的 ClassLoader。这在一般的 Java 中都是如此,而不仅仅是 Android。 Android 将通过每次使用新的 ClassLoader 来隔离 Activity ——至少,它不保证不会,据我所知它会这样做。

任何单例或其他类级状态都与 Class 相关联,而 ClassClassLoader 相关联。这就是你的状态“消失”的原因;实际上,您的调用代码在新的 ClassLoader 中看到了新的 Class

因此,您的基于枚举的技巧或类似的任何其他技巧将具有完全相同的行为。您只是不能以这种方式“保存” Activity 信息。您可以而且应该写入 SQLite 数据库。您也可以将它存储在 SharedPreferences 中。

关于android - Android 上基于枚举的单例的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8679894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com