我正在尝试弄清楚如何正确处理位置权限的更改。到目前为止,我使用委托方法处理更改:locationManager:didChangeAuthorizationStatus:
。但我确信这可以在应用程序在前台运行时运行。
如果用户在“设置”应用中更改了位置权限,会发生什么情况。如果应用未运行,则应用会在应用启动时看到更改,这样就可以了。但是,如果应用程序被暂停,应用程序将如何通知?委托方法locationManager:didChangeAuthorizationStatus:
是否仍然在某一点被调用?
答案 0 :(得分:1)
该应用程序位于后台,但未执行代码。系统会自动将应用程序移动到此状态,并且在执行此操作之前不会通知它们。 暂停时,应用程序仍保留在内存中,但不会执行任何代码。 当出现内存不足的情况时,系统可能会清除已暂停的应用程序,恕不另行通知,以便为前台应用程序腾出更多空间。
所以你的问题有点细微差别。虽然应用程序特别处于挂起状态,但它不会运行任何代码。 然而,当位置状态发生变化时(假设您的应用已调用requestAlwaysAuthorization并且用户已授予访问权限),该应用将被唤醒"并放回到背景状态。来自the iOS Developer Library
如果您使重要更改位置服务保持运行且您的iOS应用随后被暂停或终止,则当新位置数据到达时,该服务会自动唤醒您的应用。在唤醒时,应用程序将被置于后台,您将获得少量时间(大约10秒)来手动重新启动位置服务并处理位置数据。 (在可以传递任何挂起的位置更新之前,您必须在后台手动重新启动位置服务。
因此,要回答您的问题,应用程序不会在暂停状态下收到位置更新;但是,它被置于后台状态,最终确实接收到位置更新。