使用Core Location在后台执行适当的function吗?

最近,我注意到有一些应用程序请求访问用户的位置以在后台执行某些function。

例如 :用于扫描和上传用户照片以进行备份的应用程序,因此当进入后台状态时,它会继续扫描和上传。

我在问什么:

  • 如果有后台执行机制来执行后台任务(选择目标 – >function – >后台模式),那么为什么要使用核心位置来做这样的事情呢?

  • 如果使用核心位置不同,使用它有什么好处?

此外,我已经阅读(这是我的假设),使用核心位置而不是意味着应该导致应用程序被拒绝,这是奇怪的事情 – 我提到过 – 有一些应用程序这样做! 我觉得有点困惑。

此外,我已经阅读(这是我的假设),使用核心位置而不是意味着应该导致应用程序被拒绝,这是奇怪的事情 – 我提到过 – 有一些应用程序这样做! 我觉得有点困惑。

你有理由怀疑。 不要模仿这种行为。 这些人滥用 CoreLocation作为一种让他们的代码在后台运行的方法,即使他们并没有真正使用任何CoreLocationfunction。

你不能在后台随意做事 – 而且有充分的理由。 不要违反规定。 如果您想在后台继续上传,请使用带有后台URLSessionConfiguration的URLSession。 以正确的方式做事。

编辑:删除任何疑问:我不推荐以下方法,事实上,像@matt我强烈反对任何人使用这个或类似的方法。 请参阅下面的评论,以便更好地在后台更新应用。

要回答OP问题:您可以要求CLLocationManager获取significantLocationChanges 。 这不仅会通知您并在后台为您提供CPU时间,而且会实际启动您的应用程序(即使在手机重启后!)也可以让您知道位置更改。

这是一种很好的方式,可以在后台承诺自己一些额外的处理时间(虽然你说 – 这是一个非常糟糕的“应用程序行为”,甚至可能导致你的应用程序被AppStore拒绝)

AFAIK第一个使用Dropbox的应用程序 – 他们在设置中有一个完整的屏幕,解释了为什么他们要求你提供位置来备份你的图像…因为iOS没有任何事件(对于第三方开发者)来通知应用程序关于设备照片的变化,Dropbox解决方案是在这些位置变化上“醒来”并检查自己是否有变化,如果他们发现任何变化 – 他们会在后台将新图像上传到Dropbox。

significantLocationChanges仅使用低功耗方法,如蜂窝塔和附近的Wifi,因此电池非常容易使用。 然而,处理本身可能是密集的,具体取决于利用此方法的应用程序。