当应用程序在后台时没有收到 didReceiveMemoryWarning

Posted

技术标签:

【中文标题】当应用程序在后台时没有收到 didReceiveMemoryWarning【英文标题】:Not getting didReceiveMemoryWarning when app is in the background 【发布时间】:2011-05-20 22:12:23 【问题描述】:

我注意到当我的应用程序在 iPad 模拟器上处于后台状态时,我的视图控制器没有调用它们的 didReceiveMemoryWarning 方法。更具体地说,我在日志中看到了对 applicationDidEnterBackground 的调用,然后我点击了“模拟内存警告”按钮,然后我注意到特别缺乏任何 didReceiveMemoryWarning 调用。

但是,当我将应用程序带回前台时,我突然收到didReceiveMemoryWarning 调用,就好像它已排队一样。

我在这里感到困惑的是,我的应用程序是否真的在后台,或者它是否完全暂停。有没有办法在模拟器中分辨?

另外,如果它还没有被暂停,并且真的只是在后台,那么我会觉得我无法处理 didReceiveMemoryWarning 很愚蠢。因为这意味着只有前台应用程序可以处理内存警告以释放空间,这当然很奇怪,因为前台应用程序可能只是可能运行的数十个应用程序之一,如果它们更有意义都可以释放内存。

无论如何,主要问题是:为什么我没有在后台状态下获得didReceiveMemoryWarning?还有,我真的被停职了吗?我怎么知道?

【问题讨论】:

【参考方案1】:

如果您没有启动后台任务,或者在后台执行 VOIP、位置跟踪或音频,那么您的应用程序在 applicationDidEnterBackground 之后暂停。它不会收到任何通知。任何通知都会保留(即使是在应用程序暂停后发生的通知),并在应用程序再次进入前台时发送到应用程序。

【讨论】:

请添加来源。以我个人的经验,情况并非如此,并且会在后台看到内存警告。【参考方案2】:

我认为情况并非如此。我可以在后台访问 didReceiveMemoryWarning 代码。一旦系统产生低内存信号而不是作为一个好公民,我们应该释放内存。这也有助于我们的应用程序不会被系统终止。

【讨论】:

以上是关于当应用程序在后台时没有收到 didReceiveMemoryWarning的主要内容,如果未能解决你的问题,请参考以下文章

应用程序在 iOS 11 中处于后台时未收到推送通知

当应用的“位置”和“后台应用刷新”权限发生变化时,在后台收到通知

检索应用在后台时收到的通知列表

当应用程序在后台收到通知时如何获取通知有效负载数据

iOS 本地通知 - 在后台时回调

当应用程序被杀死时,iOS 没有收到推送通知