我正在尝试使用一个静态单例DataManager,它为我的Activity创建网络请求并保存数据数组,在我的Activity的onCreate()
类中实例化,但活动每次都会被销毁是一个方向的变化正在绊倒我。我不想重新创建一个新的单例,并且每次用户更改方向或返回到屏幕时都会重新填充数据。Android中的单身人士活动和服务生命周期
即使我将DataManager设置为服务,如果我将其设置为绑定服务,每当我的活动被破坏时,服务似乎都会被销毁,但如果我没有将其绑定服务并使用startService()
和stopService()
在我的Activity中,只要我的Activity被破坏,它也会被销毁。另外,如果我使用onSaveInstanceState()
和onRestoreInstanceState()
来保存我的单例实例,当我的Activity处于非活动状态时,有可能我的单例会被销毁,因为不再有指向它的指针。然后使用相同DataManager类的Activity B可以创建另一个DataManager实例,而Activity A处于非活动状态。然后活动A唤醒,使另一个数据管理器膨胀,给我们2个不再是单身的DataManagers,并且可能有不一致的数据。
我已阅读elsewhere我不应该继承应用程序来维护应用程序状态,但我不明白它如何以其他方式工作。谢谢你的澄清。
请记住,如果框架在最后一次活动退出后仍然保留处理过程,那么'Application'实例将保持不变,并且下次启动应用程序时不会再调用同一个实例,的onCreate()'。 –
我的理解是,如果应用程序被终止并且使用不再有效的指针恢复活动,则可能会导致NullPointerException异常:[请参阅此博文](http://www.developerphil.com/dont -store-数据内式应用对象/)。 – newt
这里是对最佳实践的讨论(而不是在这里重复它们)http://stackoverflow.com/questions/14057273/android-singleton-with-global-context – FriendlyMikhail