2010-12-08 119 views
6

如果你有一个android应用程序有多个Activity,并且Activity A启动了B,那么如果Activity b崩溃了,那么这个进程会被杀死,但是会被android操作系统重新启动并重新启动Activity A而不是关闭应用程序,为什么?为什么Android会“复活”崩溃的应用程序?

+0

它实际上是复活A还是只是杀死B? – blindstuff 2010-12-08 15:42:48

+0

它重新启动整个过程,但启动只有onCreate和onStart只有A,如果你有一个谁启动B谁启动C和C有一个崩溃的异常,然后android将启动应用程序进程,并把B放在前台,如果你按'返回'键,你会再次得到A,但它会再次调用A的onCreate。 – codeScriber 2010-12-08 15:55:06

回答

4

你抱怨说,Android将尝试在崩溃后正常恢复您的应用程序的状态? ;)

这是Android的资源管理的结果,并在工作中活动的生命周期。请记住,单个任务可以由多个活动组成,这些活动可能跨越多个进程或应用程序。如下所述:http://android-developers.blogspot.com/2010/04/multitasking-android-way.html Android进程不会在传统的* nix进程意义上“干净地”关闭。您的应用程序的组件会接收生命周期事件,但在某个特定时间点后,应用程序可能会被终止而无需进一步警告,以便系统可以回收其资源。

例如,用户可能会浏览网页,点击YouTube链接启动的YouTube应用,然后点击分享按钮,以启动他们喜爱的社交网络应用程序和发布视频链接。这是同一项任务的一部分;如果用户多次按下,他们会回到他们开始的浏览器页面。

一旦你开始了社交网络应用程序,系统可能会决定它的运行内存不足,它会杀了关闭浏览器的过程中,以腾出更多。 (毕竟,它不在前面,用户不会注意到。)当用户按下后退按钮返回到浏览器活动时,它会重新启动并重建用户离开它的最后一个状态。在最坏的情况下,用户在重新初始化时遇到短暂的延迟。

但这同样的事件在还原以前的活动状态,甚至可以在在相同的工艺相同的应用程序发生的顺序。在您的方案中,由于崩溃导致活动B关闭。因此,系统完成它始终做的事情 - 它返回到前面的活动:活动A.但是活动A的过程不在(它崩溃!),所以系统重新启动它,它可以重建其以前的状态。