关于iOS 后台执行任务

如何让iOS设备上App定时执行后台任务(上) 在本篇博文中,我们讨论了Apple官方实现App定时执行后台任务的方法,并详细介绍了后台任务(Background Tasks)相关的注册、调度和调试等方面的细节。 阅读详情

一. beginBackgroundTaskWithExpirationHandler

关于后台执行,任何app进入后台时,设置beginBackgroundTaskWithExpirationHandler,都有3分钟左右的后台任务执行时间。 3分钟后,app会被iOS强行挂起。

但是,有5类app允许有“无限的”后台运行时间:

1.  Audio。

2.  Location/GPS。

3.  VoIP。

4.  Newsstand。

5.  Exernal Accessory 。

你可以将任何app声明为上述5种类型以获得无限的后台运行时间,但当你提交到App Store时,苹果一旦发现你“滥用”了后台API,你的app将被拒绝。

在企业部署中,你可以将一个app声明为VoIP,但这个程序根本和VoIP无关,我们的目的只是为了让iOS给我们无限后台执行的权限。声明过程是在app的Info.plist文件中加入以下key:

<key>UIBackgroundModes</key>

<array>

<string>voip</string>

</array>

测试代码:

- (void)backgroundHandler {

    UIApplication*    app = [UIApplicationsharedApplication];

    bgTask = [app beginBackgroundTaskWithExpirationHandler:^{

       [app endBackgroundTask:bgTask];

        bgTask = UIBackgroundTaskInvalid;

    }];

    // Start the long-running task

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

int counter = 0;

        while (1) {

            NSLog(@"counter:%ld", counter++);

            sleep(5);

       }  

    });

}

- (void)applicationDidEnterBackground:(UIApplication *)application

{

    BOOL backgroundAccepted = [[UIApplicationsharedApplication] setKeepAliveTimeout:600 handler:^{ [selfbackgroundHandler]; }];

    if (backgroundAccepted)

    {

        NSLog(@"backgrounding accepted");

    }

    [selfbackgroundHandler];

}


注:iOS 10 上,貌似只能执行3分钟,继续研究中。


二. setKeepAliveTimeout


1.要成功调用该函数,就必须在Info.plist里设UIBackgroundModes键的array值之一voip字符串.

2.timeout必须>=600

3.唤醒后只有10秒执行时间。即handler里的代码要在10秒类执行完。10秒后app再次被阻塞。

4.该函数成功调用后,在程序生命周期内有效。

该函数的效果在回到前台的状况下,依然有效。(因此可以把它当timer使.) 

5.clearKeepAliveTimeout函数用来清除handler。


如何让iOS设备上App定时执行后台任务(下) 在本篇博文中,我们详细讨论了如何搭建一个最简单的云主机(云服务器)来向设备推送远程(静默)通知,从而最终完成设备中App定时执行后台任务的功能! 阅读详情

相关推荐

理解iOS运行循环与后台任务的同步执行

本文探讨了iOS运行循环的概念,以及如何在主线程之外同步执行长时间运行的任务。文章详细介绍了运行循环的工作原理,主线程处理UI事件的重要性以及避免主线程阻塞的方法。同时,通过示例代码展示了如何使用NSOperation和NSBlockOperation在后台同步运行任务,并讨论了同步执行任务时的最佳实践和潜在问题。

weixin_31659095的博客 318

ios iphone 详解在IOS后台执行

以下大家友情支持一下: 做了一个产品,需要人气支持一下,android和iphone上91市场搜索#super junior粉丝团#,或者直接到页面下载http://m.ixingji.com/m.html?p=X16,大家帮忙捧捧场 官方文档:http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/i

1万+

Zotero搭配CNKI.js插件:一键批量下载知网文献的完整教程(附常见问题解决)

本文提供Zotero搭配CNKI.js插件实现知网文献批量下载的完整教程。详细介绍了从环境准备、插件安装到实战操作的全流程,并针对常见问题提供解决方案,旨在帮助科研人员高效构建自动化文献管理工作流,显著提升文献收集与整理效率。

e4f5g6h7的博客 1198

beginBackgroundTaskWithExpirationHandler

正常程序退出后,会在几秒内停止工作; 要想申请更长的时间,需要用到 beginBackgroundTaskWithExpirationHandler endBackgroundTask 一定要成对出现 - (void)applicationDidEnterBackground:(UIApplication *)application { [self beginTask];

sharpyl的专栏 812

宏基因组分析|完整分析流程梳理

今天先从最基础的全流程框架说起,无论是刚接触的萌新,还是想查漏补缺的同行,都能找到有用的信息。

weixin_70911870的博客 3161

用CentOS 7安装cadence搭建适合IC Design的科研环境(四)——IC617、MMSIM151、calibre2015安装过程step by step

以下操作都在root权限下执行。建立安装目录建议把这种大型软件装在/opt目录下。mkdir -p /opt/cadence/installscape mkdir -p /opt/mentor/Calibre2015其中-p参数是直接建立父目录。因为IC617和MMISM151会自己建立安装目录,所以在这里没有建相关目录。而calibre则是默认安装在安装包所在的目录下,所以需要提前建立。解压安

maxwell2ic的博客 7万+

iOS 后台任务总结

并且,即使你的 APP 已经挂掉啦,下载任务还是会继续,等到下载完成啦,系统会唤起你的 APP 进程,并通知你,但如果是用户主动杀掉的你的进程,那么系统会自动取消下载任务。,你需要在这个回调里检查是否有新内容可用,如果有,就开启后台下载,推荐使用 NSURLSession 来建立,下载完成后,你必须调用这个方法出入 的 completionHandler 并传入一个 整型值 来表示 你的处理是否正常,UI是否已经更新,让系统来决定更新 snapshot等;但我看介绍,跟前面讲解的 后台下载文件没啥区别啊!

旭日的博客 3917

YOLO系列算法改进 | Neck改进篇 | 融合FAAFusion傅里叶角度对齐模块 | 攻克多尺度方向特征冲突,角度检测精度飙升! | CVPR 2026

YOLO系列算法改进 | Neck改进篇 | 融合FAAFusion傅里叶角度对齐模块 | 攻克多尺度方向特征冲突,角度检测精度飙升! | CVPR 2026 (以YOLO26最新目标检测模型为基础,利用FAAFusion傅里叶角度对齐模块改进Neck部分)

2502_91881744的博客 315

ios 开启后台任务,beginBackgroundTaskWithExpirationHandler 使用细节问题备忘

app进入后台,会停止所有线程;需要在applicationDidEnterBackground中调用beginBackgroundTaskWithExpirationHandler申请更多的app执行时间,以便结束某些任务,如 AVAssetWriter的(ios中当AVAssetWriter处于AVAssetWriterStatusWriting状态时,若进入了后台状态将导致后续操作失败,详

lc316546079的专栏 3410

数学建模学习(120):使用Python实现基于AHP的供应商选择分析

使用Python实现基于AHP的供应商选择分析

全栈川川 909

zemax像差参数Ray Fan/Spot Diagram/MTF/....讲解三

zemax像差参数Ray Fan/Spot Diagram/MTF/....讲解三

weixin_72050316的博客 1384

ios后台执行任务详解

在IOS后台执行是本文要介绍的内容,大多数应用程序进入后台状态不久后转入暂停状态。在这种状态下,应用程序不执行任何代码,并有可能在任意时候从内存中删除。应用程序提供特定的服务,用户可以请求后台执行时间,以提供这些服务。 判断是否支持多线程 UIDevice* device = [UIDevice currentDevice];  BOOL backgroundSupported = NO;

用心去记录 6096

从扩散到流匹配:具身智能中的生成模型原理与实现细节(具身智能/VLA/机器人面试常考)

本文探讨了生成模型在具身智能中的应用,重点对比了扩散模型和流匹配(Flow Matching)两种方法。扩散模型通过逐步加噪和去噪过程学习数据分布,建模能力强但采样速度慢;而Flow Matching直接学习连续向量场,更适合实时轨迹规划等需要快速连续生成的任务。文章还分析了自注意力机制的优势、ROS1/ROS2通信架构差异,并提供了Flow Matching的PyTorch实现代码。这些生成模型使机器人系统能够处理不确定性、多模态信息和连续控制问题,从传统的确定解转向更灵活的分布建模范式。

m0_51738372的博客 235

IOS 后台无限执行任务

找到一些关于ios后台可以继续执行任务的相关代码,分享一下: 首先需要配置Info-Plist文件,在里面新建一个Required background modes。这个是一个数组,在下面添加如下内容: App provides Voice over IP services(VOIP) App plays audio or streams audio/video using Ai

yuan860627的专栏 1156

Autosar PNC网络管理配置-UserData的使用

之前配置的网络管理报文中的data都由ComM管理,后面客户新增了需求,最后两个byte需要发送,本文记录一下相关配置的修改能配置生成的,尽量不手码,毕竟手写一堆bug~

赞的博客 1903

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

iOS 切换到后台任务执行

官方文档:http://developer.apple.com/library/ios/#documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html 中文的好文章 http://www.devdiv.com/thread-47004-1-1.html

fhbystudy的专栏 4378

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ios 退出程序通知后台_iOS 程序退到后台,如何继续执行任务

- (void)applicationDidEnterBackground:(UIApplication*)application{}问题:当应用被送到后台,主线程就会被暂停。用NSThread的detachNewThreadSelector:toTar get:withObject:类方法创建的线程也被挂起。场景:应用从前台退到后台程序执行代理方法applicationDidEnter...

weixin_39926103的博客 755

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

IOS 后台无限执行任务

好久没写文章了,最近遇到了一个hou tai

yqmfly的专栏 7125

iOS 应用进入后台后,如何短暂的执行一个任务

iOS 应用进入后台后短暂的实现任务在开发中,我们难免会碰到应用程序进入后台后,但是我们任然要执行一些任务。比如保存一个文件,跳到第三方分享的时候处理一些任务,发送一些请求什么的。但是应用进入后台后不久后就会转入暂停状态。在这种状态下,程序不会执行任何的代码,并且有可能随时被删除。有三种服务可以在后台执行。音频,定位,VoIP(VoiceoverInternetProtocol 是一种以IP电话为主

淡暗 2488

ios 后台执行任务解析

关于iOS的后台,以下引用一些文段进行一下脑补,请同学们大致看一下,有个基础,原文出处-----------------------------------------------------------------------------------------------OS 7中,实际上APP拥有四种后台模式,无论是哪一种后台机制,均需要利用苹果给予的相应后台接口实现。IOS7系统中,开发者...

a787188834的专栏 212

IOS 执行一个有限长度的后台任务

当应用程序转入后台时,可以请求额外的时间,来完成重要的一分钟任务。请求后台执行时间,可以调用UIApplication类的beginBackgroundTaskWithExpirationHandler: 方法,这个方法延迟你的应用程序挂起的时间。这可能是重要的,若执行一些重要任务,如将用户数据保存至磁盘或从服务器下载重要的文件。         beginBackgroundTaskWithE

987

ios后台执行任务(180s)

1.在appDelegate.h中声明后台任务标识符 @property (nonatomic,unsafe_unretained)UIBackgroundTaskIdentifier backgroundTaskIdentifier; 2.在,程序进入后台的方法当中添加如下代码,并在程序再次进入后台时,取消后台任务 - (void)applicationDidEnt

戋戋的博客 465

移动端AI后台任务实现:Claude Cowork在iOS与Android的异步执行方案

在移动开发中,后台任务处理是实现应用异步能力的关键技术,它允许应用在用户不直接交互时继续执行逻辑。其核心原理在于利用操作系统提供的特定后台执行模式,如Android的WorkManager和iOS的Background Tasks,通过任务队列和状态持久化机制,确保任务的可调度与可恢复性。这项技术的价值在于显著提升用户体验和生产力,将同步操作转化为异步处理,使用户能够更自由地管理时间。在应用场景上,它广泛适用于长时数据处理、事件监听和间歇性连续对话等需求,例如AI助手的持续分析、价格监控或复杂对话维护。本文

weixin_34014555的博客 478
上一篇: opencv图像全景拼接
下一篇: iOS 多线程同步 锁
直隶码农
博客等级 码龄19年 95粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值