终止/暂停时位置 API 发生重大变化的行为?

2023-12-09

这是来自CL位置管理器描述应用程序行为的文档开始监控重大位置变化:

如果您启动此服务并且您的 随后申请 系统自动终止 重新启动应用程序到 如果有新事件到来,则背景。在 在这种情况下,选项字典 传递给 应用程序:didFinishLaunchingWithOptions: 您的应用程序委托的方法 包含密钥 UIApplicationLaunchOptionsLocationKey 表明您的申请是 由于位置事件而启动。 重新启动后,您仍然必须 配置位置管理器对象 并调用此方法继续 接收位置事件。当你 重启定位服务,当前 事件已发送给您的代表 立即地。此外,位置 您的位置经理的财产 对象填充最多 最近的位置对象甚至在您之前 启动定位服务。

所以我的理解是,如果你的应用程序终止(我假设如果你不调用停止监控重大位置变化 from 应用程序将终止)你会被吵醒UIApplicationLaunchOptionsLocationKey参数为应用程序:didFinishLaunchingWithOptions。那时你就创建了你的CL位置管理器, call 开始监控重大位置变化并进行后台位置处理有限的时间。所以我对此很满意。

上一段仅讨论了应用程序终止时会发生什么,并没有建议您在应用程序暂停时做什么。的文档didFinishLaunchingWithOptions says:

该应用程序跟踪位置 后台更新,被清除, 现在已经重新启动。在这个 情况下,字典包含一个键 表明该申请是 由于新地点而重新启动 事件。

建议您仅在终止后启动应用程序(由于位置更改)时才会收到此呼叫。

然而,关于重大变更服务 in the 位置感知编程指南有以下说法:

如果您让此服务保持运行并且 您的申请随后将 暂停或终止服务 自动唤醒你的 新位置数据时的应用 到达。起床时,您的 应用程序被置于后台 并给予少量时间 处理位置数据。因为 您的应用程序在后台运行, 它应该做最少的工作并避免 任何任务(例如查询 网络)可能会阻止它 在指定时间之前返回 过期。如果没有,您的 申请可能会被终止。

这表明如果您的应用程序已被暂停,您会被位置数据唤醒,但没有提及您是如何被唤醒的:

  • 是否UI应用程序代理收到回调告诉我我正在从挂起状态恢复到后台状态?
  • 位置管理器(应用程序暂停时被冻干)是否开始接收locationManager:didUpdateToLocation:fromLocation回调?
  • 我只需要在我的中实现代码吗?更新到位置检查应用程序状态并在后台模式下进行最少处理的消息?

在写这篇文章的过程中,我想我可能刚刚回答了我自己的问题,但如果我对此的理解得到更有知识的人的证实,那就太好了。


自从我问这个问题以来,我已经做了相当多的测试(主要是在家里和工作之间的火车上),并确认了暂停应用程序的行为正如我在问题末尾所怀疑的那样。

也就是说,您暂停的应用程序被唤醒,您不会在应用程序委托上收到任何回调,而是通过现有的位置接收位置更新CLLocationManagerDelegate。您可以通过检查来检测您是否正在后台运行应用程序状态,并对从挂起状态唤醒进行定位处理的情况做有限的工作。

[UIApplication sharedApplication].applicationState == UIApplicationStateBackground

我通过一个位置测试工具得出了这个结论,欢迎您使用download并尝试一下。这是一个非常简单的应用程序,允许您通过 UI 打开重大更改和 GPS 更改 API,并记录您收到的所有响应。

N.B.前面的答案中的第六点不正确。冻干暂停的应用程序确实会收到CLLocationManagerDelegate当它们从挂起状态唤醒时回调。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

终止/暂停时位置 API 发生重大变化的行为? 的相关文章

  • 在 Ruby 中生成 GUID

    我有一个问题 用 GUID 很容易解决 特别是 对于密码重置工作流程 我想将 GUID 令牌发送到用户的电子邮件并让他们使用该令牌重置密码 由于 GUID 是唯一的 因此这非常安全 并且可以避免我通过电子邮件向人们发送密码 这是有风险的 我
  • F# 正确使用序列缓存

    我正在尝试将 Seq cache 与我制作的函数一起使用 该函数返回最多为 N 的素数序列 不包括数字 1 我无法弄清楚如何将缓存的序列保留在范围内 但仍然使用它在我的定义中 let rec primesNot1 n 2 n gt Seq
  • 如何在 Flutter 中对 RaisingButton 的颜色进行动画处理?

    我有一个RaisedButton 我想要animate它的颜色来自green to red 反之亦然 每次用户单击它时 这怎么能做到呢 您可以使用AnimatedContainer https api flutter dev flutter
  • 蓝牙 LE 中步数计数的服务和特性是什么?

    低功耗蓝牙中步数的服务 特征值 UUID 是什么 蓝牙文档的相应页面没有列出任何步骤 如何计算步数 计步设备是否使用跑步速度和步频服务 谢谢 有些设备确实使用跑步速度和节奏服务 您应该能够通过将 总距离 除以 瞬时步长 两者都可以在RSC测
  • 检查一个数是否是完全平方数?

    我认为以下代码存在精度问题 bool isPerfectSquare long long n long long squareRootN long long sqrt n 0 5 return squareRootN squareRootN
  • Spring 的 LdapTemplate 搜索:PartialResultException:未处理的延续引用;剩余名称 '/'

    我通过 LDAP 为某个使用 spring 制作的应用程序添加用户 虽然这适用于大多数情况 但在某些情况下 它不起作用 检索我使用的用户 public class LdapUserServiceImpl implements ILdapUs
  • 用于将用户发送至设备应用商店上的应用评论页面的 URL

    为了将 iTunes App Store 置于最前面并打开它以显示应用程序的评论页面 要启动的 URL 是什么 我想将我的用户发送到 撰写评论 页面 其他一些 SO 答案提供了如下 URL 但它似乎不起作用 itms apps itunes
  • JAAS keytab 配置的相对路径

    我有一个系统 其中 NET 客户端使用 Kerberos 针对 Java 服务器进行身份验证 一切正常 但我正在尝试改进服务器配置 目前一个keytab根目录中需要文件C 因为我的jaas配置文件看起来像这样 Server com sun
  • 列表框:添加组合框作为项目?

    是否可以将列表框的每个项目都作为组合框 我需要这个 因为我将列表框设置为可检查 然后我需要让用户从列表中每个元素的不同选项中进行选择 Thanks 如果您不打算分发您的应用程序 那么您还可以查看 TreeView 控件 请参阅此示例 COD
  • CMake 中的 FindSDL2 发生了什么?

    我在游戏中使用 SDL2 我一直使用自定义 FindSDL2 cmake 因为标准 CMake 集中没有 然而 前段时间确实出现了有关 FindSDL2 的帖子 例子 红迪网帖子 https www reddit com r opengl
  • 在 LP2844Z(Zebra 打印机)上的收据中包含 PNG [重复]

    这个问题在这里已经有答案了 我正在致力于创建一个基于 HTML5 画布的签名 绘图框 目前我们在服务器上将画布保存为PNG 但可以轻松地将base64字符串保存在数据库中 现在的问题是我们如何在打印的收据上添加签名 目前我们使用 GF 字段
  • 为什么 as.character() 返回日期列表中的整数?

    我惊讶地发现 R 中出现以下行为 as character c Sys Date gt 1 2018 02 05 as character list Sys Date gt 1 17567 为什么会出现这种情况 也就是说 显然 17567
  • Vuex store.watch 只接受 Vue routerguard 中的函数

    我正在尝试观察并等待 Vue 路由器防护从 Vuex 获取最终值 但它会抛出异常 vuex store watch 只接受一个函数 这是代码 const isAdmin get store getters user isAdmin unde
  • Google Analytics PHP(发送信息)

    大意 我正在开发一个项目 我需要使用 Google Analytics 服务器端 我不需要检索信息 但我需要发送信息 我最终可以发送 js 脚本客户端 但在这种情况下它不是一个选项 以下大多数链接都非常旧 2012年 检索 不是我需要的 我
  • 在哪里放置资源特定逻辑

    您能帮我考虑在 AngularJS 中将资源 服务 特定的业务逻辑放置在哪里吗 我觉得在我的资源上创建一些类似模型的抽象应该很棒 但我不确定如何做 API调用 gt GET customers 1 lt first name John la
  • 创建进程默认浏览器

    我目前正在使用 ShellExecute 打开 在用户浏览器中打开 URL 但在 Win7 和 Vista 中遇到了一些麻烦 因为该程序作为服务运行提升 我想获取线程 id 因此 ShellExecute 无法获取线程 id 因此我开始使用
  • 如何循环遍历颜色数组以更改按键背景(按下/向下)

    互联网 如果这与其他人没有什么关系 请原谅我 但我会将其留在这里 以防这是一个有效的问题 我正在尝试创建一个文本区域字段 其中用户每次按下键 a z 都会触发背景颜色更改 在数组中列出 我一直在用 JQuery 做这件事 我想我已经很接近了
  • SQL Express 上的 OLAP

    我想知道是否有任何桌面 OLAP 解决方案可以使用 SQL Express 因此不需要 Analysis Services 我的任务是找到一种方法让我们的客户能够制作 临时 报告 但其中绝大多数都是在 Sql Express 上 在以前的工
  • 如何使用 WinJS 以编程方式关闭 Win8 应用程序中的 MessageDialog?

    Here is 类似的问题 https stackoverflow com questions 12698666 how to close message dialog programmatically关于如何以编程方式关闭 Win8 应用
  • 如何根据当前日期时间发现财政年度?

    我需要基于当前或今天的日期时间的财政年度 假设我们认为今天的日期是10 April 2011 那么我需要输出为Financial Year 2012在某些情况下 我需要以短格式显示相同的输出FY12 我想以两种方式显示 在我们的要求中 考虑

随机推荐

  • php:获取ip地址

    我想获取访客的IP地址 你能告诉我什么元素吗 SERVER 我应该使用 SERVER HTTP CLIENT IP SERVER HTTP X FORWARDED FOR or SERVER REMOTE ADDR UPDATE 如果您的客
  • Xcode 4 中的这些图标代表什么?

    我以前从未见过这些 但是文件浏览器中文件名旁边的小 A 和 M 是做什么用的 让我根据SVN的知识猜测一下 A gt 新添加的文件 M gt 修改现有文件
  • 如何在 Titanium JS 中创建带有按钮的标题栏?

    我在用着钛合金构建一个应用程序 我尝试创建一个带有按钮的标题栏 类似于联系人应用程序 如下图所示 该标题的标题位于中间 按钮位于任一站点 我一直在到处寻找一种在钛中做到这一点的方法 但我还没有找到任何东西 文档中似乎没有这个内容 我需要创建
  • 如何在配置单元中保留驼峰式大小写的列名

    选择 12345 作为 EmpId 输出是 empid 值为 12345 有任何线索可以保持与 EmpId 相同的列名吗 不可能 这是 HIVE 元存储的限制 它以全小写形式存储表的模式 Hive 使用此方法来标准化列名称 请参阅表 jav
  • 内部访问修饰符与私有访问修饰符

    两者有什么区别internal and privateC 中的访问修饰符 internal适用于程序集范围 即只能从同一 exe 或 dll 中的代码访问 private适用于类范围 即只能从同一类中的代码访问
  • 为什么char数据的地址不显示?

    class Address int i char b string c public void showMap void void Address showMap void cout lt lt address of int lt lt i
  • 没有 Web 服务器的 Spring Boot

    我有一个简单的 Spring Boot 应用程序 它从 JMS 队列获取消息并将一些数据保存到日志文件中 但不需要 Web 服务器 有没有办法在没有Web服务器的情况下启动Spring Boot 春季启动 2 x 3 x 应用程序属性 sp
  • Laravel 4 不刷新

    我在 laravel 4 中遇到一个奇怪的问题 因为每次我尝试刷新页面时都不会出现更改 肯定不是浏览器的缓存 任何帮助表示赞赏 我遇到了同样的问题并找到了答案 尝试在 php ini 中禁用 OPcache 如果您使用MAMP 可以在 Ap
  • 隐藏已编译应用程序可执行代码的实践

    反编译和逆向工程 net 程序集是一种标准做法 我想发布一些将添加到现有应用程序的插件程序集 但我不希望它们被其他人使用 有哪些方法可以隐藏这些程序集的来源 除非控制目标硬件 否则理论上不可能实现 100 的保护 如果 CPU 能够执行它
  • 咖啡 | solver.prototxt值设置策略

    在 Caffe 上 我正在尝试实现一个用于语义分割的全卷积网络 我想知道是否有一个具体的策略来设置你的 solver prototxt 以下超参数的值 测试迭代器 测试间隔 迭代大小 max iter 这是否取决于您的训练集的图像数量 如果
  • c语言中绝对值的写法

    我知道该解决方案很丑陋并且在技术上不正确 但我不明白为什么代码不起作用 include
  • 包括 ACL 条件下的功能

    我有一个名为 MedicalFile 的资产 其中包含对组织的引用 参与者 HealthCareProfessional 也属于一个组织 现在我想定义一个 ACL 规则 限制医疗保健专业人员只能查看 MedicalFile 与其组织连接的医
  • Java 中 JESS 的输出

    我想将 事实 发送到java中的JESS文件并获取结果 我基本上对 JESS 文件进行批处理 然后通过 add 将我的数据 此处的结构 发送到引擎中 我试图将 JESS 结果 应该是一个字符串 转换为 值 Rete engine new R
  • Kafka 连接器和架构注册表 - 检索 Avro 架构时出错 - 未找到主题

    我有一个主题 最终会有很多不同的模式 目前它只有一个 我已经通过 REST 创建了一个连接作业 如下所示 name com mycompany sinks GcsSinkConnector auth2 config connector cl
  • 维基百科信息框需要正则表达式

    好的 这就是我需要的 我们有维基百科文章的完整 XML 我们只需要信息框部分 我尝试过各种方法 但我的主要问题似乎是无法匹配 内部 花括号 有什么想法 或者您已经设法完成此任务的任何正则表达式吗 对于那些不知道我在说什么的人 这是我试图解析
  • PDO 获取/获取全部

    对 PHP 来说并不陌生 但对 PDO 来说才刚出生一天 我肯定在这里做错了什么 query conn gt prepare SELECT FROM admins WHERE username username AND password p
  • 如何在 VBA 中将数据从访问表复制到数组?

    我正在开发一个程序 它可以从表中的一个字段中获取数据 并将整列放入数组中 甚至可以从表本身中读取数据 该代码似乎使用了表单或其他我想使用数组的东西 这将起作用 Dim rstData As DAO Recordset Dim v As Va
  • 允许 ics 在 iOS 的 PhoneGap 应用程序中打开

    所以我使用了这段代码here稍微增强一下 可以在 iOS 上动态创建 ics 文件 msgData1 start time text msgData2 end time text msgData3 Location text var ics
  • 如何在 SQL select 语句中动态创建列

    我有3张桌子 团队 选项 选项团队 团队拥有 TeamId 和 NameOption保存OptionId OptionGroupOptionTeam持有TeamId OptionId OptionGroup select a TeamId
  • 终止/暂停时位置 API 发生重大变化的行为?

    这是来自CL位置管理器描述应用程序行为的文档开始监控重大位置变化 如果您启动此服务并且您的 随后申请 系统自动终止 重新启动应用程序到 如果有新事件到来 则背景 在 在这种情况下 选项字典 传递给 应用程序 didFinishLaunchi