【问题标题】:Executing code in background在后台执行代码
【发布时间】:2011-04-19 13:18:06
【问题描述】:

我有一个应用程序定期(通过NSTimer)使用locationManager:startUpdatingLocation 询问用户位置我希望locationManager 在后台运行,因此在info.plist 文件中输入了“UIBackgroundModes = location”。

我的问题是我没有看到预期的结果,我是否认为当我按下主页按钮时应用程序委托调用“applicationDidEnterBackground”但尽管允许 locationManager 继续我的 NSTimer 被暂停(并且作为结果它没有调用 startUpdatingLocation 来定期查询设备位置)。任何想法/解决方案将不胜感激......

加里。

【问题讨论】:

    标签: iphone objective-c cocoa-touch


    【解决方案1】:

    所有 NSTimer 在进入后台时都会失效。您需要通过 CLLocationManager 检查是否有任何更改。

    只要让 startUpdateLocation 保持运行,您的委托将收到位置的任何重大更改。

    在后台运行时,您只会收到基于手机信号塔的位置变化。

    【讨论】:

    • 谢谢,澄清一下,我的理解是:无法阻止应用程序进入后台,也无法在后台指定设备何时查询其位置。我的问题是我正在编写一个露营应用程序,以在荒野中绘制一个徒步旅行者的位置(每 2 分钟一次),那里只有很少的细胞塔。
    • 不,没有办法禁用主页按钮。重大更改将允许您发送 UILocalNotification,然后您可以告诉用户他必须打开应用程序以更新他/她的标题。
    • 如果您不按主页按钮,而只是让手机运行应用程序,则将屏幕调暗以省电,然后锁定显示...是应用程序,NSTimers 等仍在运行.只是好奇iOS是否会在某些时候自动暂停应用程序,还是仅在按下“主页”时才会发生这种情况?
    • 好吧,我猜是这样,从来没有尝试过:S,但是 - (void)applicationWillResignActive:(UIApplication *)application 将被调用并净 - (void)applicationDidEnterBackground:(UIApplication *)application 所以我猜你会没事的。
    【解决方案2】:

    如果您阅读-applicationDidEnterBackground: 的文档,您会发现是的,您的计时器已失效。此外,iOS 应用程序编程指南会告诉您如何使用track location from the background

    【讨论】:

    • 谢谢,我知道这些选项(但不是 NSTimers 会停止工作的事实)我的问题是 SLC 不会生成任何有规律的位置,特别是在农村/荒野地区。唯一的其他选项是“连续运行”,这对电池寿命不利。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多