抛出异常后保留单例实例

时间:2014-10-30 08:57:24

标签: android android-activity exception-handling singleton

我创建了一个Android应用程序,它使用单例来保持其状态。应用程序启动时将实例化该类。

应用程序确实广泛使用了片段,但不是单个Activity应用程序。

当某个活动因某些(任何)原因崩溃时,会出现此问题。

通常,Android会关闭活动前一个活动的活动。由于之前的活动也以某种方式使用单例,因此需要从中恢复数据(例如)。问题是当前一个活动在新的应用程序上下文中运行时,单例不再可用,迫使Singleton重新实例化自身,当然没有数据。

超越这个问题的一种方法似乎是将状态(序列化或不序列化)存储在文件或数据库中,但这意味着对应该避免的几乎所有其他用户活动进行过多的读写操作。除了UX之外,此解决方案可能会导致错误或不合时宜的同步数据不一致或错误。

我想听听你对此事的意见。 干杯!

这是Singleton实例化方法。

final public class Data {
    private static Data INSTANCE = new Data();

    private Data() {}

    public static Data getInstance() { 
        return INSTANCE; 
    }
}

2 个答案:

答案 0 :(得分:0)

如果在root活动中将单例声明为静态,则应保存它。我们使用与基线活动相关联的静态变量,每个活动都可以从中获取。

Antoher解决方案可能是使用共享偏好。

很高兴担心性能,但是如果你有很多碎片和很少的活动,那么这将是导致大部分工作量的碎片

答案 1 :(得分:0)

1)您可以使用Application课程。它会在最后阶段被摧毁。

2)如果您的数据不是结构化的 - 您可以将其保存在SharedPreferences中(例如,使用JSON映射的字符串)

3)如果您的数据是结构化的 - 您应该将其存储在DB(或更好的ContentProvider)