Android:拥有永远不会被杀死的Singleton类

Yur*_*kov 0 java service singleton android task

在我的Android应用程序中,我有一个Singleton类.当应用程序任务存活时,它就像一个魅力.但是在应用程序任务被杀死之后,Singleton类被破坏了,这显然是.我需要让这堂课永远活着.可能吗?什么是使这个类从未被Android系统杀死的最佳方法,在这种情况下我是否需要使用后台服务?

Tre*_*vor 6

使用服务的目的是为了确保Singleton类始终保留在内存中以便后续调用应用程序,这将是非常糟糕的设计.它根本不是服务的用途.请参阅:http://www.androidguys.com/2009/09/09/diamonds-are-forever-services-are-not/.

如果您希望确保在下次创建应用程序时保留大量数据,那么您应该选择适当的方法来保存该数据.例如,这可能是通过使用SharedPreferencesSQL或缓存等,具体取决于您要保留的数据类型.然后,设计所有Activity类以正确处理当所有Singleton数据未处于初始化状态时它们被恢复的场景.

我个人维护着一个复杂的科学应用程序,它依赖于在RAM中保存了大量的单例数据.我在开发的早期阶段遇到的一个重要问题是,可能发生以下情况:

  • 你有三个Activity类(例如); 称他们为A,B和C.
  • 您将Singleton数据附加到Application类.
  • 用户使用该应用程序,然后导航到应用程序C.此时,已经初始化了许多Singleton数据.然后,用户导航回到家(发射器).
  • 与此同时,Service当用户与其他应用程序交互时,您的应用程序的Application类将被销毁并创建(可能已多次)以及它使用的任何类.
  • 之后,用户返回到您的应用.Activity栈重新开始,这意味着用户直接进入Activity C.但是,Singleton数据现在全部消失了.让Activity C以"空"未初始化的数据集启动可能会导致崩溃或向用户显示空白页.
  • 关键点:可以恢复活动堆栈,以便应用程序在活动C上恢复,即使已重新启动Application类并且所有全局数据都已从轨道中获取.

为了应对上述情况,我所做的关键是确保所有活动不仅仅假设活动启动时全局(Singleton)数据存在且完好无损.我的应用程序中依赖于全局Singleton数据的每个Activity都首先检查该数据,如果它没有初始化,则调用我的Application类中的方法来触发该数据的重新生成(在我的例子中,涉及从文件中检索该数据) SD卡).

简而言之,在Android中处理全局/单一数据需要一些关心和思考.您不能强制系统无限期地避免杀死您的应用程序,因此也不能杀死所有Singleton数据.因此,我学到的关键事项是持久化并检索数据,并设计Activity类以正确处理在创建Activity时未发现Singleton数据已初始化的情况.