繁体   English   中英

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

[英]Android: have Singleton class that will never been killed

在我的Android应用程序中,我有一个Singleton类。 当应用程序任务处于活动状态时,它就像是一种魅力。 但是在终止应用程序任务之后,Singleton类被销毁,这很明显。 我需要让这堂课永远活着。 可能吗? 避免此类被Android系统杀死的最佳方法是什么?在这种情况下,我需要使用后台服务吗?

为了试图确保Singleton类始终保留在内存中以便后续调用应用程序而使用Service的设计是非常糟糕的。 这根本不是服务的目的。 参见: 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数据。 然后,用户导航回到家(启动器)。
  • 同时,您的应用程序的Application类以及它在用户与其他应用程序交互时使用的任何Service被销毁和创建(可能要重复几次)。
  • 稍后,用户返回到您的应用程序。 恢复了活动堆栈,这意味着用户直接进入了活动C。但是,单例数据现在已全部消失。 使用活动的“空”未初始化数据集启动C可能会导致崩溃或向用户显示空白页。
  • 关键点:有可能恢复Activity堆栈,以便即使Application类已重新启动并且所有全局数据已从轨道移走,应用也可恢复到Activity C上。

为了应对上述情况,我要做的关键是确保所有Activity都不会仅仅假设在Activity启动时就存在完整的全局(Singleton)数据。 我的应用程序中依赖于全局Singleton数据的每个Activity首先检查该数据,如果未初始化,则调用Application类中的方法以触发该数据的重新生成(在我的情况下,这涉及从文件中检索该数据。 SD卡)。

简而言之,在Android中处理全局/单例数据需要一些注意和考虑。 您不能强迫系统无限期地避免杀死您的应用程序,从而杀死所有您的Singleton数据。 因此,我学到的关键知识是持久性和检索数据,并设计Activity类以正确处理在创建Activity时未发现尚未初始化Singleton数据的情况。

是的,您需要使用后台服务。后台服务是与其他所有组件相比在被杀死方面具有最高优先级的组件,但是请确保或服务应连续运行。

尝试使用moveTaskToBack() 这应该够了吧。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM