【问题标题】:why does android 'revives' crashing apps?为什么 android 会“复活”崩溃的应用程序?
【发布时间】:2010-12-08 15:40:56
【问题描述】:

如果您有一个具有多个 Activity 的 android 应用程序,并且 Activity A 启动 B,那么如果 Activity b 崩溃,该进程将被终止,但由 android OS 恢复并再次启动 Activity A 而不是关闭应用程序,为什么?

【问题讨论】:

  • 它是真的复活了 A,还是直接杀死了 B?
  • 它重新启动整个过程,但仅以 onCreate 和 onStart A 启动,如果你有一个启动 B 的启动 C 和 C 有一个崩溃异常,那么 android 将启动应用程序进程并将 B在前台,如果您按“返回”键,您将再次获得 A,尽管它会再次调用 A 的 onCreate。
  • 是的,我试过你提到的,看来你是对的,虽然有时我总是跳回 A。希望有人知道答案。

标签: android android-activity kill


【解决方案1】:

您在抱怨 Android 在崩溃后会尝试优雅地恢复您的应用程序的状态? ;)

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

例如,用户可能正在浏览网页,点击 youtube 链接启动 youtube 应用程序,然后点击分享按钮启动他们最喜欢的社交网络应用程序并发布视频链接。这都是同一任务的一部分;如果用户多次按下返回,他们将在浏览器中返回到他们开始时使用的页面。

一旦您启动社交网络应用程序,系统可能会判断它的内存不足,它会终止浏览器的进程以释放更多内存。 (毕竟,它不在前面,用户不会注意到。)当用户按下后退按钮返回浏览器 Activity 时,它会重新启动并重建用户离开它的最后状态。在最坏的情况下,用户会在事情重新初始化时遇到短暂的延迟。

但是,即使在同一个应用程序的同一个进程中,恢复先前 Activity 状态的相同事件序列也可能发生。在您的场景中,活动 B 由于崩溃而关闭。所以系统完全按照它一直在做的事情 - 它返回到之前的 Activity:Activity A。但是 Activity A 的进程并不还在附近(它崩溃了!)所以系统重新启动它并且它可以重建它之前的状态。

【讨论】:

  • 你说的是真的,但是在 logcat 中你可以看到,即使应用程序收到信号 3(优雅地杀死)它仍然很糟糕地死掉,这意味着没有 onDestroy 和应用程序的 onTerminate 被调用。我不是在抱怨,但我有点特别讨厌我,我认为如果有办法阻止它发生会很好,因为任务和流程有很多方面可以改变。
猜你喜欢
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 2020-12-21
  • 2013-01-04
  • 2018-04-03
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
相关资源
最近更新 更多