后台任务运行时未调用 iOS applicationWillEnterForeground 和黑屏

Posted

技术标签:

【中文标题】后台任务运行时未调用 iOS applicationWillEnterForeground 和黑屏【英文标题】:iOS applicationWillEnterForeground not called and black screen while background task is running 【发布时间】:2012-11-16 20:01:00 【问题描述】:

当用户暂停我的应用程序时,我正在使用后台任务来完成一些操作。 这工作正常,但我只是注意到,如果用户在后台任务完成之前重新激活应用程序,屏幕将保持黑色并且 applicationWillEnterForeground: 永远不会被调用。

一旦后台任务完成,一切都会再次正常并调用 applicationWillEnterForeground,但是有没有办法让应用程序在任务运行时重新激活?

我所能找到的就是让后台任务不断检查剩余时间,并注意当应用程序重新激活时,剩余时间会变得非常高。然后它可以自行结束并出现应用程序,但这仍然意味着应用程序黑屏半秒左右。

【问题讨论】:

【参考方案1】:

快速提问。你在使用 beginBackgroundTaskWithExpirationHandler 吗?

您是否正在异步运行实际工作?如this answer所示? objective c - Proper use of beginBackgroundTaskWithExpirationHandler

如果没有,您应该在 a-sychornously 上运行您长时间运行的工作,因为否则它将作为您的主 RunLoop 的一部分执行。这确实会阻止您的应用重绘和响应,直到长时间运行的任务完成。

【讨论】:

以上是关于后台任务运行时未调用 iOS applicationWillEnterForeground 和黑屏的主要内容,如果未能解决你的问题,请参考以下文章

应用程序退出时未调用 FirebaseMessagingService onMessageReceived(不在后台)

SDCAlertView 回调 clickButtonAtIndex 在 iOS 运行时未被调用

(iOS)后台运行下载任务

APNS:didReceiveRemoteNotification:fetchCompletionHandler 在应用程序处于后台时未运行(除非 xcode 正在调试)

在 iOS 中定期在后台线程中运行任务

使用 WatchOS 应用程序时未调用 viewDidLoad