mma*_*oka 5 lifecycle singleton enums android
几天前,我发现单身人士可以在Android中成为反模式.我的单例(具有私有构造函数的类和存储在静态字段中的实例)被删除(尽管其他活动仍在使用此单例(通过getInstance()方法),因此实例被删除,因此必须创建另一个实例)因为Activity从中第一次调用被删除(在仅为此一项活动调用完成后).
我已经读过这个问题是如何解决的,但是我也读过"Effective Java".据说"单元素枚举类型是实现单例的麻烦方式".
所以现在我想知道在Android应用程序中以这种方式创建的单例的生命周期是什么?它是否与"标准单例实现"的情况相同,因此在破坏第一次被销毁时调用它的活动(即使它也用于其他活动)?
我不是要问关于正确的android单例实现还是单例模式本身(是模式还是反模式等),但是我想知道这个枚举单例对象的生命周期是什么以及什么时候它会被销毁.
在所有情况下,您使用的类都与ClassLoader
加载它们的类相关联。一般而言,Java 都是如此,而不仅仅是 Android。Android 每次都会通过使用 new 来隔离活动ClassLoader
——至少,它不保证不会,而且据我所知它确实如此。
任何单例或其他类级状态都与 绑定,而Class
又与 绑定ClassLoader
。这就是你的状态“消失”的原因;实际上,您的调用代码Class
在 new 中看到了 new ClassLoader
。
因此,您基于枚举的技巧或类似的任何其他内容都会具有完全相同的行为。您无法以这种方式“保留”活动信息。您可以而且应该写入 SQLite 数据库。你也许也可以把它藏起来SharedPreferences
。
归档时间: |
|
查看次数: |
1944 次 |
最近记录: |