【发布时间】:2013-07-31 19:00:40
【问题描述】:
概述
我的公司要求我发布一个可以每两小时检查一次设备位置的应用程序。该应用程序将通过 TCP/IP 套接字将这些位置数据发送到我的服务器,然后根据这些数据接收信息(直接通过相同的 TCP/IP 套接字)。所以我不试图让我的应用程序在后台模式下连续运行(实际上,这似乎是 iOS 中的热门话题,它也不适合我的项目)。
问题
为了可靠,实现这一目标的最佳做法是什么?所以,我想知道:
- 由于我的应用已暂停(= 不活动),Apple 是否允许在
didUpdateToLocation唤醒时打开套接字以发送位置? - 我必须在多长时间内通过我的套接字执行发送/接收任务?
- 我是否应该使用
beginBackgroundTaskWithExpirationHandler创建一个真正的后台任务并使用 Cocoa 允许的 10 分钟来执行我的发送/接收任务? - 是否可以(Apple 允许)要求每 2 小时执行一次 10 分钟的后台任务,无需人工交互(即用户应重新打开应用等)?
到目前为止我取得的成就/发现
- 我在
Info.plist中添加了location键,以便在我的应用处于非活动状态时能够运行didUpdateToLocation处理程序。 - 当我的应用程序处于前台(= 活动)时,我能够通过打开的套接字发送和接收数据。
- 当
didUpdateToLocation被调用时,我尝试检查backgroundTimeRemaining。我得到了一个非常大的结果数字,这似乎很正常,因为此时applicationState不在UIApplicationStateBackground中,而是在UIApplicationStateActive中。
这些点在官方文档中不是很清楚,也没有找到与我具体案例相关的话题。
感谢您的帮助。
【问题讨论】:
-
beginBackgroundTaskWithExpirationHandler不会创建后台任务,它会将当前线程标记为希望在应用程序处于后台时继续运行的线程。 -
@user1382094:请记住将正确答案标记为您的问题的已接受答案,以防它帮助您。谢谢!
标签: ios cocoa-touch sockets core-location background-process