代码之家  ›  专栏  ›  技术社区  ›  Dan Ray

有史以来最奇怪的事情:核心位置保持活跃,即使在应用程序不运行

  •  3
  • Dan Ray  · 技术社区  · 15 年前

    我友好的天才在我的手机周围戳了戳,指出位置服务指针在屏幕的右上角亮着。他进入定位服务设置。他指出,以下应用程序的“获取位置数据在过去几个小时”的旗帜亮起:天气频道,Showtimes,和两个应用程序,我写的,并在几天内提交。

    他关闭了每个应用程序的滑块,我们看到上角的位置服务指针关闭。为我的任何一个应用程序重新打开位置服务都会使其重新打开,而天气频道和Showtimes则不是这样。但很明显,为我的两个应用打开位置服务会激活设备的位置服务。我糟糕的电池寿命是可以解释的,但这只是神秘的开始。

    事情是这样的。。。。我的两个应用程序当时都没有运行。他们甚至没有背景。他们走了。我认为它们目前都内置在我设备上的调试配置文件中,而且它们都使用核心位置。他们没有停赛,只是平躺着不跑。然而,在位置服务控制面板中为它们中的任何一个打开滑块,通常都会启动位置服务。

    所以。。。这到底是怎么回事?这两个应用都没有配置为后台位置。还有。。。他们不在后台!由于我已经为他们关闭了定位服务,毫无疑问我的电池使用量大大减少了。

    1 回复  |  直到 13 年前
        1
  •  3
  •   Dan Ray    15 年前

    解决方案位于Apple开发者论坛的以下主题: https://devforums.apple.com/thread/58063?tstart=0

    这两个应用的早期版本都调用了 [locationManager startMonitoringSignificantLocationChanges] ,从未打过电话 stopMonitoring... . 尽管当前版本的应用程序没有发出该调用,但操作系统仍然将监控请求“注册”到应用程序中(事实上,当我开车在城里转的时候,正在后台重新启动它们!)。

    我不知道的是,监视请求会在发布和重新构建过程中持续存在!我以为,就像 -startUpdatingLocation ,则监视请求将随进程一起终止,但不是这样。解决方案是从我的设备上删除应用程序并重新安装。