iOS 会在后台杀死应用程序吗?

Posted

技术标签:

【中文标题】iOS 会在后台杀死应用程序吗?【英文标题】:Could iOS Kill an App in the Background? 【发布时间】:2012-04-19 14:45:14 【问题描述】:

当设备开机时,ios 是否可以在后台自动终止我的应用程序(调用applicationWillTerminate:)?

我也很好奇另外两种情况会发生什么,总共三个:

    设备已开机 设备已关机 设备没电了

我之所以这么问,是因为我想知道applicationWillTerminate: 可能多久被调用一次。我想知道这一点,因为那是我注册远程通知的地方。如果将设备令牌发送到服务器失败,我想知道再次调用该方法的可能性有多大(即重试将设备令牌发送到服务器)。

【问题讨论】:

【参考方案1】:

如果您的应用程序支持多任务处理(任何与 iOS 4.0+ 相关的默认设置),则几乎不会调用此方法。文档说它可能在应用程序在后台运行并且系统想要终止的情况下被调用。但是,根据我的经验,我只在运行一个在后台积极播放音乐并且系统正在抛弃所有内容的音乐应用程序时才真正看到过这个调用。在我运行后台任务(不是音乐,而是短期后台任务)的情况下,我看到应用程序在没有调用此方法的情况下终止。

我永远不会依赖这个被调用并尝试在您的委托方法中进行所有需要做的清理工作,以过渡到后台和后台任务完成块(它们至少会执行一段时间应用程序被抛弃前几秒钟)。

【讨论】:

【参考方案2】:

iOS 不仅可以自动终止您的应用程序,而且用户可以手动终止它。事实上,唯一用户可以杀死你的应用的时间是它在后台。此外,当您的应用处于“后台”时,它更可能被挂起而不是实际运行,因此当您不是前台应用时,不要指望进行大量处理。

至于您收到-applicationWillTerminate: 的可能性有多大,这取决于用户以及他们使用设备的方式。拿到手后要妥善处理,否则就做自己的事。

【讨论】:

+1。我看到很多用户杀死应用程序,因为他们认为它可以节省内存。玩得好并使用applicationWillTerminate: 来说明(不正确的)杀死您的应用程序的用户是一个好政策。 当用户在我完成我必须做的事情之前杀死我的应用程序会发生什么,比如保存核心数据数据库?我能做什么? @acecapades 根据文档,您将有大约 5 秒的时间在 applicationWillTerminate 方法中保存数据。【参考方案3】:

当内存不足时,iOS 可以关闭你的应用,调用applicationWillTerminate

docs 说这个方法:

...但是,在应用程序在后台运行(未挂起)并且系统出于某种原因需要终止它的情况下,可能会调用此方法。

【讨论】:

【参考方案4】:

查看iOS Developer Library : iOS App Programming Guide : App Termination。

【讨论】:

以上是关于iOS 会在后台杀死应用程序吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 7 中运行的应用程序在后台被杀死

如果应用程序被杀死/运行,ios显示/隐藏通知

如何知道我的应用程序被杀死的原因

iOS应用程序被杀死时处理程序不能显示远程通知吗?

防止iOS在几分钟后杀死App

当应用程序处于状态后台或被杀死时,如何在不点击通知的情况下存储 iOS 远程通知?