0

我正在使用 iPhone 上的 LocationManager 开发一个位置跟踪应用程序。以下是我的问题。如果用户点击iphone上的Home键,意味着应用程序切换到后端,位置管理器的线程是否仍然有效?位置管理器会更新当前位置吗?以下是示例代码。

CLLocationManager *_locationManager;

- (void)startStandardUpdates {
    if (nil == locationManager) {
        locationManager = [[CLLocationManager alloc] init];
    }

    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyBest;

    // Set a movement threshold for new events.
    locationManager.distanceFilter = kCLLocationAccuracyNearestTenMeters;

        //Will the thread still work even the application is switched to background?
    [locationManager startUpdatingLocation]; 

    CLLocation *currentLocation = locationManager.location;
    if (currentLocation) {
        PAWAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
        appDelegate.currentLocation = currentLocation;
    }
}
4

3 回答 3

0
  • 来自开发者网站的注释

有几种方法可以在后台跟踪用户的位置,其中大多数实际上并不需要您的应用程序在后台连续运行:

The significant-change location service (Recommended)

Foreground-only location services

Background location services

对于不需要高精度位置数据的应用,强烈建议使用重大变化位置服务。使用此服务,仅当用户的位置发生重大变化时才会生成位置更新;因此,它非常适合社交应用程序或为用户提供非关键、位置相关信息的应用程序。如果应用程序在发生更新时被挂起,系统会在后台将其唤醒以处理更新。如果应用程序启动此服务然后终止,系统会在新位置可用时自动重新启动应用程序。此服务在 iOS 4 及更高版本中可用,并且仅在包含蜂窝无线电的设备上可用。

仅前台和后台位置服务都使用标准位置核心位置服务来检索位置数据。唯一的区别是,如果应用程序暂停,仅前台位置服务将停止提供更新,如果应用程序不支持其他后台服务或任务,则很可能会发生这种情况。仅前台位置服务适用于仅在前台时需要位置数据的应用程序。

为用户提供持续位置更新(即使在后台)的应用程序可以通过在其 Info.plist 文件中包含 UIBackgroundModes 键(带有位置值)来启用后台位置服务。在 UIBackgroundModes 键中包含此值不会阻止系统挂起应用程序,但它确实告诉系统它应该在有新的位置数据要传递时唤醒应用程序。因此,此键有效地让应用程序在后台运行,以便在位置更新发生时处理它们。

在此处输入链接描述

于 2013-04-29T13:00:29.600 回答
0

也许你应该记录你的位置。

后台还有一个关于locationmanager的非常有用的教程。

这可能会帮助你。

唯一的问题是,苹果不太喜欢这个,可能会在后台 20 分钟后杀死你的应用程序。

http://mobile.tutsplus.com/tutorials/iphone/ios-multitasking-background-location/

祝你好运,

如果您有任何问题,请随时问他们。

于 2012-08-29T10:06:51.543 回答
0

位置管理器,如果您不停止或释放它,它将继续运行,直到应用程序被暂停。如果您在 info.plist 中设置了所需的后台操作,则可以允许它无限期地继续更新。在这种情况下,如果您的应用被暂停,它会在事件中唤醒您的应用。

话虽如此,在后台调用方法可能非常困难。

如果您计划在后台状态下使用该服务,有许多考虑因素。线程和锁定、缺少 UI 和运行循环空闲问题比比皆是。你应该认真评估你想要完成的事情,并考虑用最简单的方式来实现它。电池寿命是便携式设备的头号问题。您的功能必须对用户最有利,以保证能源使用。如果您锁定设备或干扰用户操作,您将不会成为受欢迎的客人。

您可以在 github 上查看我自己的处理程序示例,它可以为您提供一些见解和解决方案:

TTLLocationHandler

于 2012-10-16T13:35:55.913 回答