【发布时间】:2023-03-25 03:47:01
【问题描述】:
我阅读了很多关于 iOS 后台的信息,但对于一个特定案例的概念,我仍然无法理解。
当我的应用被任务管理器(或由于内存压力而被 iOS 杀死)并且发生显着的LocationChange 或 GeoFence 时,我的整个应用由 iOS 启动并调用我的回调方法。
这里的第一个问题是:我处于什么状态?甚至 UI 也被部分加载,所以我是一种前景,但由于显示屏上没有任何内容,我认为它是背景。
我的第二个也是主要问题是,如果当前互联网连接中断,我如何发送 http 请求并重新发送它们?
我尝试使用 [NSThread sleepWithInterval]、dispatch 延迟和 NSTimer。所有这些都具有相同的糟糕结果:它在前台运行良好,在正常背景下运行良好(用户按下主页按钮),但在上述状态下非常糟糕。如果它们运行得足够快,我可以发送多个 http 请求,但是当我需要几秒钟的睡眠时,我会被随机杀死。当我使用具有 2 秒延迟的计时器时,我能够在应用程序的所有输出停止之前达到我的“重新发送 http 请求”方法 2-3 次。如果我使用我计划的 30 秒延迟,我什至没有接到一次计时器调用。
所以最后一个问题是:我需要注册一个后台权限吗?我已经用过了
<key>UIBackgroundModes</key>
<array>
<string>location</string>
</array>
或者使用 NSOperationQueue 会有所帮助吗?它有我没有的特殊权限吗?
【问题讨论】:
标签: ios objective-c http background geolocation