在我的Android应用程序中,我有一个Singleton类。当应用程序任务存活时,它就像一个魅力。但是在应用程序任务被杀死之后,Singleton类被破坏了,这显然是。我需要让这堂课永远活着。可能吗?什么是使这个类从未被Android系统杀死的最佳方法,在这种情况下我是否需要使用后台服务?
答案 0 :(得分:6)
使用服务来尝试确保Singleton类始终保留在内存中以便后续调用应用程序将是非常糟糕的设计。它根本不是服务的用途。请参阅:http://www.androidguys.com/2009/09/09/diamonds-are-forever-services-are-not/。
如果您想确保在下次创建应用程序时保留大量数据,那么您应该选择适当的方法来保存该数据。例如,可以使用SharedPreferences或SQL或缓存等,具体取决于您要保留的数据类型。然后,设计所有Activity类以正确处理当所有Singleton数据未处于初始化状态时它们被恢复的场景。
我个人维护着一个复杂的科学应用程序,它依赖于在RAM中保存了大量的单例数据。我在开发的早期阶段遇到的一个重要问题是,有可能发生以下情况:
Service
。为了应对上述情况,我所做的关键是确保所有活动不仅仅假设活动启动时全局(Singleton)数据存在且完好无损。我的应用程序中依赖于全局Singleton数据的每个Activity都首先检查该数据,如果它没有初始化,则调用我的Application类中的方法来触发该数据的重新生成(在我的例子中,涉及从文件中检索该数据) SD卡)。
简而言之,在Android中处理全局/单一数据需要一些关心和思考。您不能强制系统无限期地避免杀死您的应用程序,因此也不能杀死所有Singleton数据。因此,我学到的关键事项是持久化并检索数据,并设计Activity类以正确处理在创建Activity时未发现Singleton数据已初始化的情况。
答案 1 :(得分:1)
是的,你需要去后台服务。背景服务只是与其他所有组件相比具有最高优先级的组件。但是要确保或服务应该持续运行。
答案 2 :(得分:0)
尝试使用moveTaskToBack()。这应该可以解决问题。