gpt4 book ai didi

ios - 在后台每 X 分钟执行一次函数不起作用

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:46:01 26 4
gpt4 key购买 nike

我使用这段代码每 X 分钟执行一次函数:

- (void)executeEveryOneMinute
{
[self myFunction];

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(60 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

[self executeEveryOneMinute];

});
}

当应用程序处于前台时它可以工作。
但是当应用程序进入后台时,它就不再工作了。
当我再次将应用程序返回到前台时,它会执行一次函数。
并继续每分钟再次调用函数。

那么如何让它在后台工作呢?

最佳答案

请参阅 iOS App Programming Guide: App States and Multitasking后台执行和多任务处理部分讨论各种可能性。例如,您可以让应用程序在后台运行几分钟,以完成一些有限长度的任务。或者,如果应用程序正在执行一个非常特殊的功能列表(引用上述文档),您可以继续在后台运行该应用程序更长的时间:

  • Apps that play audible content to the user while in the background, such as a music player app
  • Apps that record audio content while in the background.
  • Apps that keep users informed of their location at all times, such as a navigation app
  • Apps that support Voice over Internet Protocol (VoIP)
  • Apps that need to download and process new content regularly
  • Apps that receive regular updates from external accessories

Apps that implement these services must declare the services they support and use system frameworks to implement the relevant aspects of those services. Declaring the services lets the system know which services you use, but in some cases it is the system frameworks that actually prevent your application from being suspended.

但是,iOS 电池/电源管理的一个基本设计原则是随机应用不能(也不应该)继续在后台运行。但是,如果您确切地分享了您正在尝试做的事情(即,您在该 executeEveryOneMinute 方法中所做的事情),我们可以在可能的情况下就如何实现预期效果提供建议。


如果你想在后台继续上传,在 iOS 7 和更高版本中,你应该考虑使用 NSURLSession 和后台 session 配置([NSURLSessionConfiguration backgroundSessionConfiguration:identifier] ;iOS 8 中也有类似的方法)。这将继续尝试上传(自动,无需您的进一步干预),不仅在您的应用程序离开前台后,甚至在应用程序终止后(例如由于内存压力或崩溃)。 AFNetworking 提供了一个基于 NSURLSession 的类,AFURLSessionManager ,它支持这一点(尽管它不是基于 NSOperation 的)。通过这种方式,您可以享受后台上传,但符合 Apple 后台操作指南,尤其是与每 60 秒重试一次相比,电池消耗更少。

我建议您引用 WWDC 2013 视频的后半部分 What’s New in Foundation Networking ,它演示了这个过程(他们正在下载,但上传的想法是一样的)。

关于ios - 在后台每 X 分钟执行一次函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24179921/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com