我使用一个只包含静态字段的单独类来存储当前应用程序数据。 部分人口来自 sharedpreferences 应用程序启动时。其余的是一些操作的类似数据的结果,用于进一步浏览这些结果(使用结果的多个活动)。
sharedpreferences
我可以转到主屏幕,启动其他应用程序等,当我返回到自己的应用程序时,它就正常工作了。
然而,自从新的 Error Reporting 我得到的一些错误报告都与 nullreference 错误。对象是 null 是对上述单独类中静态字段的引用。
Error Reporting
nullreference
null
由于我无法重现这个bug,我倾向于认为这是由于应用程序由于内存不足而被杀死,当它重新启动时,会调用 oncreate 来自用户当前所在的活动。但是,单独类中的所有静态数据都不会恢复,因此会崩溃。
oncreate
我想知道:有没有一种方法可以强制应用程序完全“重新启动”,如果最后使用的活动被杀死,就不从它开始?或者这是标准行为? 我可以用程序实现吗?就像当静态字段为空时,重新启动应用程序?
重新启动用户所处的活动是正常行为——其目的是让用户觉得应用程序从未关闭过。你可以看到两件事:
protected void onSaveInstanceState(Bundle outState){ // This gets called by the system when it's about to kill your app // Put all your data in the outState bundle }
该包与在中传递给活动的包相同。 onCreate() . 然后您可以从中获取任何必要的信息,并恢复静态类中的值。
onCreate()
另一种方法是简单地检查 onResume() 任何活动的方法。如果这些值为空或以某种方式出现错误,则可以调用Start the Original Activity和 finish() 正在启动的。
onResume()
finish()