如何永远在后台模式下运行应用程序?

Posted

技术标签:

【中文标题】如何永远在后台模式下运行应用程序?【英文标题】:How to run application in background mode forever? 【发布时间】:2011-09-16 06:48:57 【问题描述】:

我遇到了一个关键问题,让我与您分享。 我有一个 iphone 应用程序需要将当前位置发送到服务器,无论应用程序是每分钟处于后台模式还是前台模式。 我在 info.plist 参数中设置了属性,例如背景模式-->位置和其他用于位置配置的代码是通常的

- (CLLocationManager *)loc_mngr if (loc_mngr != nil) 返回 loc_mngr; loc_mngr = [[CLLocationManager alloc] init]; loc_mngr.desiredAccuracy = kCLLocationAccuracyNearestTenMeters; loc_mngr.delegate = 自我; 返回 loc_mngr;

loc_mngr 是 CLLocationManager 的一个对象。 委托方法实现完成。 它对我有用,但问题是如何在我的应用程序处于后台时启用位置服务。 请帮我如何处理? 感谢您的建议。

【问题讨论】:

对不起,我不明白你的意思是什么。 【参考方案1】:

看看this apple document,你有以下方法来做这件事。

CLLocationCoordinate2D coord = CLLocationCoordinate2DMake(0.0, 0.0); 
CLRegion *region = [[CLRegion alloc] initWithCircularRegionWithCenter:coord radius:500 identifier:@"Some Identifier"];

然后,向框架注册区域:

[locationManager startMonitoringForRegion:region]; 

委托协议定义了三种用于区域的方法:

– locationManager:didEnterRegion:
– locationManager:didExitRegion:
– locationManager:monitoringDidFailForRegion:withError:

【讨论】:

【参考方案2】:

您需要创建一个 CLLocationManagerDelegate 来接收应用的回调。您需要设置要运行的位置项,并且当您的应用程序进入后台时,您需要让代理“侦听”位置更新。这可以通过区域监控 -didEnterRegion 或 -didExitRegion。或者像标准位置监控中的 -didUpdateToLocation 一样简单。

如需了解更多信息,请阅读Apple's Location Awareness Programming Guide。祝你好运。

【讨论】:

【参考方案3】:

“永远”一词在概念上是错误的:Apple 保留随时终止应用程序的权利。你需要重新考虑逻辑。

一些注意事项:

始终开启本地化(标准本地化)是错误的:它会很快消耗电池

更好用:

[locationManager startMonitoringSignificantLocationChanges];

这种方式功耗要低得多(即使精度更低...)

使用区域:即使您的应用程序被杀死/终止,也会遵守它们。 (我们在 io5 中对其进行了测试,并且可以正常工作)

【讨论】:

以上是关于如何永远在后台模式下运行应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 Java 桌面应用程序永远不会让系统休眠并在后台运行?

后台任务永远运行?

如何永远在后台运行需要蓝牙的应用程序?

让PHP程序永远在后台运行

如何在 ios 中永远运行后台服务以同步数据

在没有服务的情况下杀死应用程序后如何在后台线程中运行代码?