【问题标题】:Removing app from active tasks results in crash when trying to reopen the app尝试重新打开应用程序时,从活动任务中删除应用程序会导致崩溃
【发布时间】:2011-04-05 19:45:42
【问题描述】:

我发现我可以通过执行以下操作使我的 iOS 应用崩溃:

  1. 启动应用程序
  2. 退出应用(使用主页按钮)
  3. 双击home键调出正在运行的任务列表
  4. 强制关闭我的应用
  5. 关闭任务列表
  6. 启动我的应用程序(崩溃)

到目前为止:

  • 这仅在我运行调试器时发生在设备(运行 4.3.1 的 3GS)上
  • 我无法在其他应用中实现这一点
  • 不是每次我都这样做
  • 它使 iPhone 处于模糊状态并出现黑屏 - 在 xcode 中结束进程不会让我回到跳板,按下主页按钮没有任何效果。我按电源按钮,然后按主页按钮,它会返回跳板。

不过,我这样做的速度非常快,所以我很好奇这是否可能是我的应用程序中的错误(以及错误可能是什么),或者跳板是否正在杀死我的应用程序,就像我正在重新启动它一样?

调试器报告说我的应用收到了“SIGKILL”信号,所以我倾向于认为这只是实际终止进程的延迟,但我不想忽略我可能犯的错误。

鉴于我无法在调试器之外重复它,这对我来说优先级较低,但如果可能的话,我仍然希望更好地理解它,尤其是当它指向我的应用程序中的错误时。

【问题讨论】:

    标签: iphone objective-c ios ios4


    【解决方案1】:

    当您终止应用时,操作系统会向它发送 SIGKILL。通常这会杀死你的应用程序,但由于附加了一个调试器,所以应用程序被暂停,让你有机会调试信号的原因(SIGKILL 可能应该是一个例外,但没有什么大问题一个)。

    当您再次启动它时,SpringBoard(主屏幕)会注意到应用程序没有死并切换到它。 [1] 此时,由于应用程序已暂停,它无能为力。我认为 SpringBoard 通过发送 SIGKILL 并等待应用终止来处理无响应的应用,但 GDB 仍处于连接状态,您的应用仍处于挂起状态,并且没有任何反应。

    此时我通常单击 Xcode 的停止按钮,或者如果这不起作用(因为 Xcode 4 是一个有缺陷的 POC),请拔下手机。

    如果您想知道为什么 SpringBoard 不简单地忽略应用程序的旧实例并生成一个新实例:只能运行一个实例。应用程序一直都在做这种假设(例如,您的应用程序没有另一个实例访问其数据库),而且我很确定 Mach 端口/引导命名空间/某些东西意味着如果有另一个应用程序将无法启动复制运行(或者如果系统的一部分认为您的应用程序仍在运行,因为清理失败)。


    在较旧的操作系统版本上,如果您的应用在退出(例如保存)、退出和快速“重新启动”时花费大量时间执行某项操作,则应用将切换到退出进程中的应用,应用程序退出完毕,主屏幕突然出现。我忘记了我在哪个操作系统版本中看到的,但我认为它已修复。

    【讨论】:

      【解决方案2】:

      当您通过 Xcode 启动应用程序时,调试器(通常是 gdb)会附加到进程中。我在 Xcode 4 中注意到的是,当您退出应用程序时,gdb 没有分离或退出(我的意思是强制它终止)。

      iPhone 似乎保留了一些有关该过程的信息,或者它没有完全关闭,当您重新启动应用程序时,gdb 检测到更改并且不了解发生了什么。这也许就是你的应用被杀死的原因。

      我在 iPhone 3GS 和 iPod 4th gen 上对其进行了测试,并(成功地)重现了该错误。

      【讨论】:

        【解决方案3】:

        我以前在调试时看到过这种情况,我认为这不是您的应用程序中的错误。

        @Geoffroy 一针见血,他说What I have noticed in Xcode 4 is that gdb isn't detached or quitted when you quit the app (I mean forcing it to terminate).

        在 Xcode 3 中,退出应用程序将导致 SIG_ABORT。 Xcode 4 的处理方式似乎有些不同。 Xcode 4 似乎会忽略杀死,直到您再次点击该图标,当它的行为与您描述的一样。在再次运行您的应用程序之前,请务必停止调试器(通过单击大停止按钮),您应该能够避免这种情况。

        我不会担心您应用的性能,但您可能想在 Apple 开发者论坛上提及它或提交错误报告。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-06-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-16
          相关资源
          最近更新 更多