我是一个Android应用程序,它使用与示例here相同的方法在扩展Application类的类上保存一些静态对象。
此类所持有的对象在我的应用程序的所有活动之间共享和操作。
一切都运行良好,但是,前段时间,我注意到当应用程序在backgroud上运行一段时间后,当它恢复时,存储在扩展类上的数据已经消失,应用程序开始抛出很多NullReference例外。
我认为发生这种情况是因为应用程序被操作系统暂时销毁,需要再次使用时重新创建。
那么,我该如何处理这种情况呢?有没有办法发现应用程序被临时销毁,而没有订阅活动的onDestroy事件?在我做的测试中,当我询问我的应用程序的后台进程被停止时,没有调用onDestroy事件。
非常感谢!
答案 0 :(得分:0)
无法确定何时终止进程,因此您应始终将重要数据存储在某处(例如SD卡),并在App类的onCreate()方法中将其恢复。
另请查看onLowMemory()和onTrimMemory(),释放内存中的所有不必要数据,以帮助操作系统防止破坏您的应用,导致确定您的应用的原因之一是内存不足。
答案 1 :(得分:0)
不,没有办法告诉您何时需要保存存储在这样的静态变量中的数据。至少据我所知,系统没有回复系统通知你。
因此,您应该仅使用静态变量来存储临时数据,或者缓存从持久性源访问的数据。我在很多项目中都遇到过这个问题,而且我总是最终使用Intents / shared prefs / sqlite / etc.来跨活动存储数据。