【问题标题】:How to perform cleanup when application is killed in background?当应用程序在后台被杀死时如何执行清理?
【发布时间】:2011-06-06 10:01:19
【问题描述】:

我的应用程序创建了一些我在其整个生命周期中需要的临时文件。我最终需要处理掉这些文件,这样它们就不会占用设备上的空间。我想我可以在应用程序退出时删除它们,但由于引入了多任务处理,生命周期并不像以前那么简单。我的主要问题是:当我的应用程序进入后台并稍后被杀死时,它会收到applicationWillTerminate: 吗?还是只是从记忆中抹去?

当应用程序进入后台时,我无法进行清理,因为它可能在操作过程中处于后台,并且一旦回到前台就需要临时文件。我想我可以在启动时清理文件,但无论如何我对 applicationWillTerminate: 行为感兴趣。

【问题讨论】:

  • 即使我在 iPhone 4 中创建游戏时也遇到了同样的问题。当用户退出应用程序并且无法保存用户位置时,应用程序没有收到 applicationWillTerminate: 调用。但在你的情况下,我认为你不必担心内存泄漏,因为如果没有指针指向它,内存将被清理,临时文件将被自动删除
  • 他担心的是临时文件,而不是内存泄漏。但是,AFAIK,tmp 文件夹在与 iTunes 同步期间被清除。

标签: ios temporary-files application-lifecycle


【解决方案1】:

Internet 说,应用程序在后台被杀死时不会调用 applicationWillTerminate:。另一种方法是保存一些信息(在 NSUserDefaults 中等),您打开了哪些临时文件,并在启动后检查这些文件是否留下,然后删除它们。 此外,您还可以了解 iOS 如何杀死您的应用程序(我假设这是通过发送信号来完成的,但我不确定)并向您的应用程序添加信号处理程序。

【讨论】:

    【解决方案2】:

    不,applicationWillTerminate: 不会在启用多任务处理的 iOS 4 设备上调用。当您的应用程序终止时,通常意味着设备内存不足,因此即使 确实 被调用,也不能说您有足够的可用内存来完成任务。 p>

    Apple 建议您在应用进入后台时进行清理。如果您需要几秒钟,您可以请求额外的时间来执行此操作(这是少数对所有应用程序开放的多任务场景之一)。

    您的其他选择是在任务完成时(无论何时)或应用程序启动时进行整理。我猜可能还有其他排列方式...

    【讨论】:

    • 应用程序退出时的清理对我来说会更容易,但没有其他选择,我会在操作结束后清理。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    • 2015-05-15
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多