Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone applicationWillResignActive对应用程序的影响?_Iphone_Objective C_Cocoa Touch - Fatal编程技术网

Iphone applicationWillResignActive对应用程序的影响?

Iphone applicationWillResignActive对应用程序的影响?,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,我正在编写一个应用程序,记录用户在行走时的固定间隔位置。我正在使用一个NSTimers来安排“startUpdatingLocation”,然后很快调用“StopUpdateLocation”,以尽可能节省电池电量 我希望用户能够启动应用程序并锁定手机,从而将应用程序置于非活动状态。我的问题是,当这种情况发生时,我的应用程序(通过Xcode运行时)似乎会正常运行,但我很好奇,应用程序在这种状态下运行的方式是否与应用程序在活动状态下运行的方式有什么不同 在文档中,它只提到了“application

我正在编写一个应用程序,记录用户在行走时的固定间隔位置。我正在使用一个NSTimers来安排“startUpdatingLocation”,然后很快调用“StopUpdateLocation”,以尽可能节省电池电量

我希望用户能够启动应用程序并锁定手机,从而将应用程序置于非活动状态。我的问题是,当这种情况发生时,我的应用程序(通过Xcode运行时)似乎会正常运行,但我很好奇,应用程序在这种状态下运行的方式是否与应用程序在活动状态下运行的方式有什么不同


在文档中,它只提到了“applicationWillResignActive”,即在应用程序到达后台的过程中通过该状态的应用程序。我更感兴趣的是,当一个被使用的应用程序锁定用户界面并将手机放在一边时,应用程序的行为如何,我只想确保它会继续做它应该做的事情,或者我需要采取额外的措施吗?

你肯定应该在设备上测试这一点。例如,模拟器不会自动锁定

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

查看多任务文档,以及它对后台位置更新的说明

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

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


还请记住,用户可以禁用应用程序的位置服务权限。尤其是现在…

当你的应用点击应用程序willresignactive时,如果你使用apps info.plist中的选项,它可以继续接收位置更新

添加
位置

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

在应用商店中的应用描述中,Apple要求:

继续使用GPS在道路上行驶 背景会显著降低 电池寿命


在用户阅读上述文字之前,您的应用程序将不被允许上线。

请看一看,特别是跟踪用户的位置。这就是我看到的,通过插入iPhone(usb),我可以为手机计时,并每隔30秒更新一次。如果我拔下手机的插头,那么iPhone会得到下一次更新,但在解锁之前什么都不做。正如你所说,听起来NSTimer正在停止,只是当设备通过USB连接时计时器没有停止,这很烦人。嗯,我不记得是否连接了电缆。尽管其中一些可能取决于手机是否被锁定以及用户是否切换到其他应用程序。我确实知道,我们的控制台日志反映了我所描述的内容,这意味着当时电缆已连接。作为一个使用过3款GPS应用程序的人,我强烈反对使用计时器。即使它真的起作用了,iphonegps也不准确。GPS读数随着使用时间的推移而变化。因此,停止和启动会导致大部分不准确的读取。用户了解所有GPS应用程序都使用电池。苹果希望精确:“您应该为此属性分配一个适合您的使用场景的值。如果仅在几公里范围内需要当前loc,则不应指定KCLLOCATIONACURACYBEST以获得精度。更准确地确定loc需要更多的时间和力量。请求高精度位置数据时,loc服务提供的初始事件可能没有您请求的精度。该服务尽快交付初始事件,然后在数据可用时继续以您要求的精度确定loc。以上内容在此处被“缩减”为大小:非常感谢,我明白您的意思,我已经给了CLLocationManager大约15秒的时间来解决一个位置,并且它一直运行良好。我过滤掉了所有的垃圾,99%的时间都会得到一个精确到10-65米之间的位置。嗨,斯蒂芬,我正在设备上测试,我只是感到困惑,当iPhone通过usb连接到mac时,NSTimer(用于获取新位置)可以运行,但当iPhone与mac断开连接时,NSTimer会关闭(与正常使用时一样)。