【问题标题】:applicationWillResignActive impact on application?applicationWillResignActive 对申请有影响吗?
【发布时间】:2011-04-27 12:57:18
【问题描述】:

我正在编写一个应用程序,它会在步行时定期记录用户的位置。我正在使用 NSTimers 来安排“startUpdatingLocation”,然后在不久之后调用“stopUpdatingLocation”以节省尽可能多的电池。

我希望用户能够启动应用程序并锁定手机,从而使应用程序处于非活动状态。我的问题是,当这种情况发生时,我的应用程序(通过 Xcode 运行时)似乎继续正常运行,但我很好奇应用程序在此状态下运行的方式与应用程序处于活动状态时的运行方式是否有任何差异?

从文档中它只提到了“applicationWillResignActive”关于应用程序在进入后台的过程中通过该状态。我更感兴趣的是应用程序在用户锁定 UI 并将手机放在一边时的行为,我只是想确保它继续做它应该做的事情还是我需要采取额外的措施?

【问题讨论】:

标签: iphone objective-c cocoa-touch


【解决方案1】:

当您的应用点击 applicationWillResignActive 时,如果您在应用 info.plist 中使用 UIBackgroundModes 选项,它可以继续接收位置更新。

添加location 键。

请务必不要在后台使用计时器,因为计时器会运行但会保持其“启动”状态,直到应用再次激活。因此,当用户返回应用程序时,您只会阅读一次。 GPS 定位准确度级别决定了电池受到的影响程度。

在您在 App Store 中的应用描述中,Apples 要求:

继续使用 GPS 运行在 背景可以显着降低 电池寿命。

在上述文字出现在用户阅读的描述中之前,您的应用将无法上线。

【讨论】:

  • 这就是我所看到的,在插入 iPhone (usb) 的情况下,我可以为手机计时,并且每隔 30 秒更新一次。如果我拔掉手机,那么 iPhone 会得到下一个更新,但在 iPhone 解锁之前什么都不做。正如您所说,听起来 NSTimer 正在停止,只是令人讨厌的是当设备通过 USB 连接时计时器不会停止。
  • 嗯,我不记得有没有连接电缆。尽管其中一些可能取决于手机是否被锁定与用户切换到另一个应用程序。我确实知道我们的控制台日志反映了我所描述的内容,这意味着当时连接了电缆。作为一个使用过 3 个 GPS 应用程序的人,我强烈反对使用计时器方法。即使它确实有效,iPhone GPS 的快照也不准确。 GPS 读数会随着使用时间的推移而变化。因此,停止和启动会导致大多数不准确的读取。用户了解所有 GPS 应用都使用电池。
  • Apple on desiredAccuracy: "你应该为这个属性分配一个适合你的使用场景的值。如果你只需要几公里内的当前位置,你不应该指定 kCLLocationAccuracyBest 以获得准确性。确定更准确的 loc 需要更多的时间和更多的力量。当请求高精度的位置数据时,loc 服务交付的初始事件可能没有您请求的准确性。服务尽快交付初始事件然后继续确定当数据可用时,具有您要求的准确度的 loc。
  • 以上是从这里“砍掉”的大小:developer.apple.com/library/ios/#documentation/CoreLocation/…
  • 非常感谢,我明白你的意思,我已经给 CLLocationManager 大约 15 秒的时间来解决一个位置并且它运行良好。我过滤掉所有的废话,99% 的时间最终得到一个精确到 10-65m 之间的位置。
【解决方案2】:

您绝对应该在设备上进行测试。例如,模拟器不会自动锁定。

当用户按下主页按钮、另一个应用程序触发用户接受的通知(包括来电时)以及设备锁定时,将调用 applicationWillResignActive。

查看多任务文档,以及关于后台位置更新的内容。

我的建议是,您可以通过以下方式节省用户的电池电量: - 启动一个计时器,当它被触发时,开始位置更新(并停止计时器) - 当您获得足够准确的位置记录时,停止位置更新并重新启动计时器 - 如果位置更新失败,请重新启动计时器更长的时间。也许他们在地下。

最有效的方法是在您的应用程序处于后台或屏幕锁定在您的应用程序上时使用重要的位置更新服务。您可能每十分钟左右获得一次更新。

还请记住,用户可以禁用您应用的位置服务权限。尤其是这几天……

【讨论】:

  • 嗨,斯蒂芬,我正在设备上进行测试,我只是对 iPhone 让 NSTimers(用于获取新位置)通过 USB 连接到 Mac 时运行感到困惑,但是 当 iPhone 与 mac 断开连接时将它们关闭(因为它会在正常使用中)。
猜你喜欢
  • 1970-01-01
  • 2011-10-02
  • 2014-03-30
  • 2011-11-12
  • 2014-01-05
  • 1970-01-01
  • 2010-12-10
  • 2014-10-05
  • 1970-01-01
相关资源
最近更新 更多