首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何让URLSession在app被移到后台时工作

在iOS开发中,URLSession可以用于进行网络请求和数据传输。默认情况下,当应用程序被移到后台时,URLSession会暂停活动,以节省资源。但是,我们可以通过一些配置来使URLSession在应用程序被移到后台时继续工作。以下是一些实现方法:

  1. 后台会话配置:使用后台会话配置创建URLSession,可以在应用程序被移到后台时继续进行网络请求。后台会话配置需要满足以下条件:
    • 配置会话的identifier,并使用该identifier初始化URLSession对象。
    • 在应用程序的Info.plist文件中添加NSURLSessionConfiguration配置的NSURLSessionBackgroundIdentifier键,值为与会话identifier相同的字符串。
    • 在应用程序的AppDelegate中实现application:handleEventsForBackgroundURLSession:completionHandler:方法,以处理后台会话任务的完成回调。
    • 例如,使用后台会话配置创建URLSession的代码示例:
    • 例如,使用后台会话配置创建URLSession的代码示例:
  • 启用后台模式:在应用程序的Capabilities中启用Background Modes,并勾选Background fetchRemote notifications选项。这将使应用程序获得后台工作的权限,并且在后台运行时可以继续网络请求。
  • 处理后台任务:在应用程序的AppDelegate中实现applicationDidEnterBackground:方法,并在该方法中调用URLSessionfinishTasksAndInvalidate()方法,以确保已经完成的任务可以被正确处理。
  • 例如,处理后台任务的代码示例:
  • 例如,处理后台任务的代码示例:

需要注意的是,在使用URLSession进行后台网络请求时,可能需要合理地管理请求任务的优先级和资源消耗,以确保后台工作的可靠性和性能表现。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):提供可扩展的云服务器实例,满足不同规模的计算需求。详情请参考:腾讯云服务器
  • 云数据库 MySQL 版:可弹性扩展、自动备份的关系型数据库服务。详情请参考:腾讯云数据库 MySQL 版
  • 人工智能机器学习平台:提供完整的人工智能开发工具链,帮助开发者构建和部署自己的机器学习模型。详情请参考:腾讯云人工智能
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何你的app后台干掉后优雅的启动

app后台强杀,是在内存不足的情况下强制释放了,也有一些恶心的rom会强制杀掉那些后台进程以释放缓存以提高所谓的用户体验。...我们现在来重现这个熟悉的一幕: 假设:App A -> B -> C C activity中点Home键后台运行,打开ddms,选中该App进程,强杀。...所以回到App,显示的还是C页面。另外当activity强杀,系统会调用onSaveInstance去你保存一些变量,但我个人觉得面对海量的静态变量,这个根本不够用。...如果你说用户已经打开了C界面,所以重新打开的是是恢复到C界面,这样的用户体验会更好啊,如果你是这样认为的,那你很多时间都是防止恢复的时候不让你的app crash了,与其这样,还不如整个app重新走整个流程呢...那且想想如何它不回到C而是重走流程呢?也就是说中断C的初始化而回到A,并且按back键,不会回到C,B。考虑一下。 我们先实例化这个场景吧。

2.6K20

Alamofire-URLSession必备技能

因为我们的Alamofire是对苹果URLSession的封装,所以探索Alamofire之前,我们来看看URLSession的必备基础 一、请求网络的基本格式 URLSession.shared.dataTask...APP已经关闭的时候仍然传输数据的会话。...注意,后台Session一定要在创建的时候赋予一个唯一的identifier,这样APP下次运行的时候,能够根据identifier来进行相关的区分。...而且,用户强制关闭了以后,IOS系统不会主动唤醒APP,只有用户下次启动了APP,数据传输才会继续 // 初始化一个后台的模式的会话配置 let configuration = URLSessionConfiguration.background...支持后台转移 sessionSendsLaunchEvents:一个布尔值,指示传输完成是否应该在后台继续或启动应用程序 isDiscretionary:一个布尔值,用于确定是否可以根据系统的判断来调度后台任务以获得最佳性能

2K20
  • 【IOS】总结-AFNetworking学习笔记

    程序在前台,NSURLSession与NSURLConnection可以互为替代工作。注意,如果用户强制将程序关闭,NSURLSession会断掉。...后台会话模式(background):该模式在后台完成上传和下载,创建Configuration对象的时候需要提供一个NSString类型的ID用于标识完成工作后台会话。...这意味着只有当设备有足够电量,设备才通过Wifi进行数据传输。如果电量低,或者只仅有一个蜂窝连接,传输任务是不会运行的。后台传输总是discretionary模式下运行。...return backgroundSess; 12. } 创建后台下载任务,应该使用后台session创建,然后resume。 [objc] view plaincopy 1..../* 后台下载任务完成后,程序唤醒,该方法将被调用 */ 2

    1.5K30

    UIApplicationDelegate

    例如,系统可能会唤醒APP,以便处理后台下载,某些类型的位置事件,远程通知以及其他类型的事件。在后台状态的APP应该尽可能少的工作。...系统可能随时清除这些挂起的app,而不会唤醒它们为其他app腾出空间。 当状态发生改变,下面的方法会被调用....四、响应通知和事件 系统向app delegate发送许多不同的通知和事件,app delegate决定如何最好地响应传入的信息并更新app。...许多情况下,app delegate可能只是通知其他对象(例如view controllers)需要自行更新,但在某些情况下,app delegate可能会自行完成工作。...如果APP需要初始化后台下载,当你开始下载系统调用 application(_:performFetchWithCompletionHandler:) app使用 URLSession 来操作后台下载

    71830

    NSURLSession与NSURLConnection区别

    而使用NSURLSessionUploadTask下载文件,会默认下载到沙盒中的tem文件中,不会出现内存暴涨的情况,但是在下载完成后会把tem中的临时文件删除,需要在初始化任务方法completionHandler...精切指出传输类型,可以系统快速响应,提高传输质量,延长电池寿命等。...,是否启动app.这个属性只对 后台sessionConfiguration 生效,其他configuration类型会自动忽略该值。...- (void)suspend; 暂停任务方法,手动调用会暂停当前任务,再次开启此任务,会从紧接上次任务开始,会面会说到如何暂停任务再开启任务。 - (void)cancel; 取消任务。...开发中,我们经常由于某种原因,在下载或上传的时候往往不能一次性下载或上传完,有可能下载或上传了一半就终止了,这时候当条件满足继续下载或上传,我们不希望从头开始,这时候就可以使用断点续传。

    1.5K60

    关于 iOS 10 中 ATS 的问题

    WWDC 15 提出的 ATS (App Transport Security) 是 Apple 推进网络通讯安全的一个重要方式。...通过将它设置为YES,可以你的 app 中的WKWebView和使用AVFoundation播放的在线视频不受 ATS 的限制。这也应该是绝大多数使用了相关特性的 app 的选择。...如果你还需要支持 iOS 9,并且需要访问网页和视频的话,可能只能去开启NSAllowsArbitraryLoads然后提交进行说明,并且看 Apple 审核员的脸色决定不让通过了。...现在的 beta 版中,似乎只要存在NSAllowsArbitraryLoadsInWebContent,不论其设置如何,WKWebView都不能加载。...关于UIWebView是否也可以NSAllowsArbitraryLoadsInWebContent为YES访问 HTTP,Apple 内部似乎也争论,但是个人认为是时候淘汰UIWebView了。

    2.2K20

    通过 3 个简单的步骤测试使用了系统单例的 Swift 代码

    虽然单例非常方便,可以从任何地方轻松访问某个API,但在涉及到代码解耦和测试,它们也会带来挑战。单例也是一个相当常见的错误来源,状态最终共享和改变导致没有整个系统中正确传播。...然而,虽然我们可以重构我们自己的代码,只真正需要的地方使用单例,但我们对系统API给我们的东西却无能为力。但好消息是,你可以使用一些技术来使你的代码使用系统单例仍然易于管理和测试。...抽象成一个协议 我们的首要任务是将URLSession中我们需要的部分转移到一个协议中,然后我们可以测试中轻松地模拟。...我的演讲 "编写具有强大可测试性的Swift代码 "中,我建议尽可能避免使用模拟,虽然这对你自己的代码来说是一个很好的策略,但当与系统的单例进行交互,模拟就成了提高可预测性的一个重要工具。...} 上面你可以看到,我试图我的模拟尽可能的简单。与其用大量的逻辑来创建复杂的模拟,不如它们返回一些硬编码的值,然后测试中进行断言,这通常是个好主意。

    46610

    Swift 中的 Task

    第一次处理任务,您可能会认识到调度队列(dispatch queue)和任务(tasks)之间的相识程度。两者都允许具有特定优先级的不同线程上分派工作。...如何运行任务 好吧,上面的例子已经给出了本节的答案。任务创建后会立即运行,不需要显式启动。重要的是要了解需要执行的工作是在任务创建后直接执行的,因为它告诉您仅在允许任务内工作开始才会创建它。...与 Combine 相比,您可能希望释放所有引用后也取消任务。 但是,Task的工作方式不同,因为无论您是否保留引用,它们都会运行。保留引用的唯一原因是自己能够等待结果或取消任务。...return image } 可以很容易的掌控任务的取消,这使得我们很容易犯错误和进行不必要的工作执行任务,请保持警惕,确保你的代码定期检查取消的状态。...用于执行的线程 默认情况下,一个任务一个自动管理的后台线程上执行。通过测试,我发现默认的优先级是25。

    3.3K20

    iOS_App性能优化(Energy Efficiency)指南整理

    文章目录 iOS应用能源效率指南 一、能源要点 二、减少工作并按优先顺序排列 1、减少后台工作 2、准确指定`QoS`优先级 3、减少计时器的使用 4、最小话 I/O 5、对`低电量模式`做出响应 三...读取和写入大量数据,考虑使用dispatch_io优化文件访问 如果数据由随机访问结构组成,建议存在数据库中,用SQLiteorCore Data 访问 了解系统如何缓存文件,并了解如何优化这些缓存的使用...、等等 尽可能使用较低的动画帧率 动画的声明周期请保持一致的帧率 避免屏幕上使用多个帧率,哪怕需要提高低帧率的那个 开发游戏使用推荐框架:SpriteKit、Metal 播放全屏视频,限制UI层级的使用...本身执行工作所消耗的能量;红色是额外使用的系统资源,需要加电才能执行的工作 灰色正方形:CPU、GPU、Network、Location、Background后台活动 CPU压力表:当app认为有低CPU...活动or app是空闲的发生的峰值可能表明可以进行优化 Disk磁盘使用量规:磁盘读取和写入活动,app已打开的文件。

    1.4K30

    NSURLSession 所有的都在这里(二)

    对于每一个完成的后台Task调用该Session的Delegate中的URLSession:downloadTask:didFinishDownloadingToURL:(成功的话) 和URLSession...这种方法两种情况下调用: 1、远程服务器请求客户端证书或Windows NT LAN Manager(NTLM)身份验证,允许您的应用程序提供适当的凭据 2、当会话首先建立与使用SSL或TLS...这个方法我们写后台下载的Demo中我们是会遇到的。...当具有延迟开始时间的后台会话任务(由earliestBeginDate属性设置)准备就绪,将调用此方法。只有等待网络负载请求可能变陈旧并需要被新请求替换,才应实现此委托方法。...这种委托方法两种情况下调用: 1、如果使用uploadTaskWithStreamedRequest创建任务,则提供初始请求正文流: 2、如果任务因身份验证质询或其他可恢复的服务器错误需要重新发送包含正文流的请求

    1.8K30

    iOS网络——NSURLSession详解及SDWebImage源码解析你要知道的NSURLSession都在这里

    就推出了,为了取代NSURLConnection,iOS9NSURLConnection废弃了,包括SDWebImage和AFNetworking3也全面使用NSURLSession作为基础的网络请求类了...NSURLSession和服务端使用的session是完全不同的两个东西不要弄混淆了,NSURLSession工作OSI 七层模型的会话层,会话层之下的所有工作,系统都已经帮我们做好了,所以这里的Session...tmp文件夹中国 NSLog(@"Location %@", location); //tmp文件夹在关闭app后会自动删除,有需要可以使用NSFileManager将该文件转移到沙盒其他目录下...,后面的回调方法都不会再执行,我第一次使用NSURLSession的时候没有仔细查看官方文档导致后面几个回调方法一直没有执行,所以实现一个回调方法一定要弄懂每一个参数的意义,就可以避免很多坑了。...backgroundSessionConfiguration后台Session运行模式,如果需要实现在后台继续下载或上传文件需要使用该会话配置,需要配置一个唯一的字符串作为区分。

    2.9K100

    Swift 中的 MainActor 使用和主线程调度

    构建应用程序时,主线程上执行UI更新任务是很重要的,使用几个后台线程,这有时会很有挑战性。使用@MainActor属性将帮助你确保你的UI总是主线程上更新。...如果您不熟悉 Swift 中的 Actors,我建议您阅读我的文章Swift中的Actors 使用以如何及防止数据竞争,全局Actors的行为类似于Actors,我不会在这篇文章中详细介绍Actors的工作方式...一旦定义,你就可以整个项目中使用全局Actor,就像你对其他 Actor 一样: @SwiftLeeActor final class SwiftLeeFetcher { // .. } 如何在...然而,在其他情况下,调度可能是不必要的,因为我们已经主线程上。这样做会导致额外的调度跳过。...在这里使用@MainActor属性可以Swift编译器对我们的代码进行性能优化。 选择正确的策略 使用 actors 选择正确的策略很重要。

    3.1K10

    NSURLSession 所有的都在这里(一)

    最后再通过最后面一个Demo,把NSURLSession的一些日常中的使用再过一遍,包括你经常会听到的后台下载、断点下载、断点续传等等都有代码介绍。      ...设置的请求是否按顺序收发 默认禁用 某些服务器中设为YES可以提高网络性能 */ @property (readonly) BOOL HTTPShouldUsePipelining API_AVAILABLE...可以看到这个类别全都是关于请求体和请求头的一些设置方法以及属性,既然这里我们说到了这两个东西,我们也说说,下面是我们常见的额请求头设置属性:       Host: 目标服务器的网络地址       Accept: 服务端知道客户端所能接收的数据类型...iPhone的所有app共用一个全局session。...收到该消息,任务对象视为已完成,并且不会再收到任何委托消息。

    2.2K30

    如何开发一个优秀的 App Clip

    App Banner•点击某人在 iMessage 应用中共享的链接 当用户调用 App clip ,系统首先验证 App clip 的元数据及其关联的URL。...App clip card 提供了很多信息,并提供了用户点击以启动 App clip 的按钮。 用户启动应用 App clip ,系统会将 URL 传递给它。...App clip 使用这些框架中的任何一个都不会导致编译错误,但是它们的 API 返回的值会指示运行时不可用,空数据或错误代码。...此外,App clip 无法执行后台活动,例如使用 URLSession 进行后台网络连接或在不使用 App clip 保持蓝牙连接。App clip 也无法请求连续的位置信息访问权限。...schemes•使用 StoreKit 的 requestReview(in :) 请求用户对该应用进行评论•搜索配对蓝牙设备 结尾 到这里,文章就结束了,下篇我们来讲下如何创建一个 App clip

    90610

    面向协议编程与 Cocoa 的邂逅 (下)

    我们可以使用 POP 来解耦,通过组合的方式代码有更好的重用性。不过 #408 中,涉及的内容偏向理论,而我们每天的 app 开发更多的面临的还是和 Cocoa 框架打交道。...在看过 #408 以后,我们就一直思考,如何把 POP 的思想运用到日常的开发中? 我们在这个部分会举一个实际的例子,来看看 POP 是如何帮助我们写出更好的代码的。...这是很不合理的,因为这意味着我们无法不更改请求的情况下更新发送请求的方式,它们耦合在了一起。...请求不应该也不需要知道如何解析得到的数据,这项工作应该交给 Response 来做。而现在我们没有对 Response 进行任何限定。...我们测试需要验证的是一个请求发出后如果服务器按照文档正确响应,那么我们应该也可以得到正确的模型实例。

    74120
    领券