我有一个Android应用,当用户未打开应用时会在后台运行一些任务。
这个想法是用户打开应用程序并配置一些要在后台完成的任务,然后再使用其他应用程序来完成任务。
为了在后台执行任务,我创建了一个Service
,因此即使应用程序不再显示在屏幕上,Android也会使其保持活动状态。
在我的应用程序中,我有一个外观,该外观负责对服务器的API请求(该外观是单例)。为了创建单例实例,我需要用户交互,以便他可以提供身份验证信息,有时还需要使用2factor auth确认登录。
问题是,有时当应用程序不是前台应用程序时,android会破坏该应用程序的整个实例(包括单例),因为后台服务是一项服务,但后台服务仍可正常工作,但是当用户重新启动该应用程序时,活动尝试访问获得nullpointerexcetion的单身人士
我的单例是复杂的方法,可以使价格变得可笑,我应该遵循哪种模式或设计策略来避免此问题。
答案 0 :(得分:-1)
当方法onSaveInstanceState
被称为建立捆绑包时,您应该保存单例的状态。然后,当再次创建Activity时,将调用OnCreate
,并且框架将把捆绑包作为参数传递,该捆绑包还将包含您之前保存的数据。这样,您可以再次设置单例属性。您可以阅读更多here。