编辑:为了消除任何疑问:我不推荐以下方法,事实上,就像@matt 我非常不鼓励任何人使用这种方法或类似方法。请参阅下面的评论,以更好地在后台更新应用程序。
要回答 OP 问题:您可以要求CLLocationManager
获取significantLocationChanges
. 这不仅会通知您并在后台为您提供 CPU 时间,而且会实际启动您的应用程序(即使在手机重启后!)以让您知道位置更改。
这是向自己承诺在后台获得额外处理时间的一种很好的方法(尽管就像您说的那样-这是一种非常糟糕的“应用程序行为”,甚至可能导致您的应用程序被 AppStore 拒绝)
AFAIK 这样做的第一个应用程序是 Dropbox - 他们在设置中有一个完整的屏幕来解释为什么他们要求您提供位置只是为了备份您的图像......因为 iOS 没有任何事件(对于第 3 方开发人员)来通知应用程序对于设备照片的更改,Dropbox 的解决方案是在这些位置更改时“唤醒”并检查自己是否有更改,如果他们发现任何更改 - 他们会在后台将新图像上传到 Dropbox。
significantLocationChanges
仅使用低功耗方法,例如蜂窝塔和附近的 Wifi,因此非常容易使用电池。然而,处理本身可能会很密集,具体取决于利用此方法的应用程序。