【问题标题】:Singleton gets destroyed单身人士被摧毁
【发布时间】:2011-06-20 08:27:56
【问题描述】:

我有一个启动服务的活动。还有一个单身Data 参与其中。当我通过转到主屏幕关闭活动时,Data 单例会在一段时间后被销毁,但是,服务应该继续运行。于是Data的部分字段又变成null,服务遇到空指针。

我怎样才能防止这种情况发生?

【问题讨论】:

    标签: android service android-activity singleton


    【解决方案1】:

    据我所知,Activity 实例会在它们自己的类加载器中启动,以确保安全。由于加载 Activity 而附加到类的任何单例都与该类加载器相关联,而该类加载器又与活动生命周期相关联。

    也就是说,我认为你不能保证这不会发生,因此不应该依赖它。

    您需要序列化任何持久状态,然后在Activity 启动时将其反序列化。

    【讨论】:

    • 对以下情况有什么想法吗?该服务定期检索一些数据,并将其存储在“数据”实例中。 Activity 处于活动状态时,会在其 UI 中显示此数据。
    • 出于这个原因,单例在 Android 中有点棘手,所以我会避免使用它们。相反,您希望在onPause() 中序列化您的数据并在onResume() 中恢复它,然后让任何依赖类在您的活动中访问Data 的托管实例。
    【解决方案2】:

    我们实现此目的的一种方法是将对象的引用存储在您创建的Application 的子类中。这是一个简单的解决方法,在大多数情况下都有效,无需创建 Service 或必须一直序列化状态。

    【讨论】:

      猜你喜欢
      • 2021-02-09
      • 2013-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-02
      • 2010-10-15
      相关资源
      最近更新 更多