applicationWillResignActive对应用程序的影响?

时间:2011-04-27 12:57:18

标签: iphone objective-c cocoa-touch

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

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

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

2 个答案:

答案 0 :(得分:2)

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

添加location密钥。

重要的是,您不要在后台使用计时器,因为计时器会运行但保持“火”,直到应用再次变为活动状态。因此,当用户返回应用程序时,您只能阅读一次。 GPS定位精度水平将决定电池受影响的程度。

在App Store中的应用说明中,Apples需要:

  

继续使用GPS运行   背景可以大大减少   电池寿命。

在上述文字出现在说明中供用户阅读之前,您的应用不会上线。

答案 1 :(得分:1)

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

applicationWillResignActive在用户按下主页按钮时被调用,当另一个应用程序触发用户接受的通知时(包括呼叫进入时)以及设备锁定时。

查看多任务处理文档,以及有关背景位置更新的内容。

我的建议是你通过以下方式保存用户的电池: - 启动计时器,在启动时启动位置更新(并停止计时器) - 当您获得足够准确的位置记录时,停止位置更新并重新启动计时器 - 如果位置更新失败,请重新启动计时器一段时间。也许他们在地下。

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

另请注意,用户可以禁用应用的位置服务权限。特别是这几天......