Android:当应用程序被杀时,如何为新启动设置入口点?

时间:2010-05-27 11:32:15

标签: android kill restart entry-point

我正在使用一个只有静态字段的单独类来存储当前的应用程序数据。 它在应用程序启动时从sharedpreferences部分填充。其余的是数据,如某些操作的结果,用于进一步浏览这些结果(使用结果的多个活动)。

我可以进入主屏幕,启动其他应用程序等。当我返回自己的应用程序时,它可以正常工作。

但是,由于新的Error Reporting功能,我收到的一些错误报告都与nullreference错误有关。 null的对象是对上述单独类中的静态字段的引用。

由于我无法重现该错误,我倾向于认为这是由于应用程序因内存不足而被杀死,并且当它重新启动时,它会从用户当前所在的活动中调用oncreate。单独类中的所有静态数据都不会被恢复,因此会崩溃。

我想知道:有没有办法强制应用程序完全“重启”,如果它被杀死,不能从上次使用的活动开始?或者是那种标准行为? 我能以编程方式执行此操作吗?就像静态字段为空时一样,重启app?

1 个答案:

答案 0 :(得分:2)

重新启动用户所处的活动是正常行为 - 我们的想法是让用户看起来像应用程序从未关闭过。你可以看两件事:

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()中的活动的捆绑包相同。然后,您可以从中获取任何必要的信息,并恢复静态类中的值。

另一种方法是简单地检查您的任何活动的onResume()方法中的值。如果值在某种程度上为null或错误,则可以调用start原始活动并finish()启动。