iPhone - 背景调查事件
很长一段时间以来,我一直在寻找一种方法,在我的iPhone应用程序中每隔X分钟轮询一次,检查数据计数器。在阅读了背景执行文档和一些试用版应用之后,我不认为这是不可能的,而不会滥用后台API。
上周我发现这个应用程序正是如此。 http://itunes.apple.com/us/app/dataman-real-time-data-usage/id393282873?mt=8
它在后台运行并跟踪您使用的蜂窝/ WiFi数据的数量。我怀疑开发人员正在注册他的应用程序作为跟踪位置更改但在应用程序运行时看不到位置服务图标,我认为这是一项要求。
有没有人知道如何实现这一目标?
没有找到相关结果
已邀请:
6 个回复
骚瓤
并且注册在
现在神奇的事情发生了:我甚至不使用VoIP套接字。但是这10分钟的回调提供了一个很好的副作用:在10分钟之后(有时更早),我发现我的计时器和之前的跑步踏板正在执行一段时间。如果在代码中放置一些NSLog(..),就可以看到这一点。这意味着,这个简短的“唤醒”会执行一段时间的代码。根据Apple的说法,我们还有30秒的执行时间。我假设,像线程这样的后台代码正在执行近30秒。如果您必须“有时”检查某些内容,这是有用的代码。 该文档说,如果应用程序终止,所有后台任务(VoIP,音频,位置更新)将在后台自动重新启动。 VoIP应用程序将在启动后自动启动后台! 滥用此行为,您可以使您的应用看起来像“永远”运行。 注册一个后台进程(即VoIP)。这将导致您的应用在终止后重新启动。 现在写一些“任务必须完成”的代码。根据Apple的说法,你还有一段时间(5秒钟?)来完成任务。我发现,这必须是CPU时间。这意味着:如果你什么都不做,你的应用程序仍在执行中!如果你完成了你的工作,Apple建议召唤一个expirationhandler。在下面的代码中,您可以看到,我在expirationHandler上有一条评论。只要系统允许您的应用运行,这将导致您的应用运行。所有计时器和线程都会一直运行,直到iOS终止您的应用程序。
在这里非常节省CPU时间,你的应用程序运行时间更长!但有一点是肯定的:您的应用程序将在一段时间后终止。但是因为您将应用程序注册为VoIP或其他任何一个,系统将在后台重新启动应用程序,这将重新启动后台进程;-) 有了这个PingPong,我可以做很多背景。但请记住,CPU时间非常闲暇。并保存所有数据,以恢复您的视图 - 您的应用程序将在一段时间后终止。为了让它看起来仍在运行,你必须在唤醒后跳回到你的最后一个“状态”。 我不知道这是否是您之前提到的应用程序的方法,但它适用于我。 希望我能提供帮助 更新: 在测量了BG任务的时间后,出人意料。 BG任务限制为600秒。这是VoIP最短时间的确切最短时间(setKeepAliveTimeout:600)。 所以这段代码在后台导致“无限”执行: 标题:
码:
应用程序超时后,将调用VoIP expirationHandler,您只需重新启动长时间运行的任务即可。该任务将在600秒后终止。但是会再次调用到期处理程序,它会启动另一个长时间运行的任务,等等。现在你只需要检查应用程序回到前台的天气。然后关闭bgTask,你就完成了。也许一个人可以做某事。像这样在expirationHandler中来自长时间运行的任务。试一试吧。使用您的控制台,看看会发生什么......玩得开心! 更新2: 有时简化事情会有所帮助。我的新方法是这样的:
这没有VoIP黑客工作。根据文档,如果执行时间结束,将执行到期处理程序(在这种情况下,我的'expirationHandler'块)。通过将块定义为块变量,可以在到期处理程序中再次递归地启动长时间运行的任务。这也导致无休止的执行。 如果您的应用程序再次进入前台,请注意终止任务。如果您不再需要它,请终止任务。 根据我自己的经验,我测量了一些东 使用GPS收音机打开的位置回调非常快地吸收我的电池。使用我在Update 2中发布的方法几乎没有能量。根据“userexperience”,这是一种更好的方法。也许其他应用程序的工作方式如下,隐藏了GPS功能背后的行为......
锑寝粒
- 不起作用。它会在10分钟后退出。即使您在评论中尝试修复(至少截至2012年11月30日的评论)。 Silent Audio - 有效,但人们因此被拒绝了 本地/推送通知 - 在您的应用被唤醒之前需要用户互动 使用背景位置 - 工作。以下是详细信息: 基本上,您使用“位置”后台模式来保持您的应用程序在后台运行。它确实有效,即使用户不允许位置更新。即使用户按下主页按钮并启动另一个应用程序,您的应用程序仍将运行。它也是一个电池滤水器&如果你的应用程序与位置无关,可能会在批准过程中延伸,但据我所知,这是唯一一个很有可能获得批准的解决方案。 以下是它的工作原理: 在你的plist集合中: 应用程序不在后台运行:NO 所需的背景模式:位置 然后引用CoreLocation框架(在Build Phases中)并在应用程序的某个地方添加此代码(在进入后台之前):
注意:
不起作用。 值得一提的是,如果您的应用程序崩溃,那么iOS将无法恢复生命。 VOIP黑客是唯一可以带回来的黑客。
旦彤
稀瓣囊
羔磺
襄挟款籍