1

我正在开发使用CLLocationManager来获取GPS数据的iOS应用程序。当用户使用快速应用程序切换器停止应用程序时停止CLLocationManager

当用户按下主页按钮然后使用快速应用程序切换器杀死应用程序时,停止CLLocationManager的正确方法是什么?

如何停止CLLocationManager然后停止GPS数据轮询?有谁知道一个很好的方法来实现这一目标,导致通常是当用户关闭应用程序,我不能执行任何代码....

编辑: 当我发送的应用背景,它应该仍然得到significantLocationChanges ,所以当应用程序发送到后台时,我无法停止CLLocationManager!

回答

1

在AppDelegate中有一个名为applicationWillResignActive的方法。此方法在您的应用即将发送到后台时运行。如果你可以从你的AppDelegate访问CLLocationManager,你可以在那里停下来。否则,您可以从applicationWillResignActive发布通知,并且您的CLLocationManager可以订阅该通知的任何类并从那里处理它。

张贴通知如下:

[[NSNotificationCenter defaultCenter] postNotificationName:@"appWillResignActive" object:nil]; 

和订阅像这样:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleResign:) name:@"appWillResignActive" object:nil]; 

那么一些这样的方法:

- (void)handleResign: (NSNotification *)notification 
{ 
    // stop CLLocationManager 
} 

编辑: 如果你想运行代码当应用程序被杀害,那么你可以在AppDelegate的这个方法中运行该代码:

- (void)applicationWillTerminate:(UIApplication *)application 
+1

你不需要发表您自己的通知,如果不是应用程序委托其他类需要应对这些事件:看到UIApplicationWillResignActiveNotification 等。 – rickster

+0

SteveB,rickster - 我刚刚编辑了我的文章,因为我还需要在应用程序处于后台时进行位置更改,因此在进入后台时无法停止CLLocationManager。无论如何谢谢你的回答! – joshi737

+0

所以你只想停止当用户手动杀死应用程序?发生这种情况时,应用程序中的所有代码都应停止运行。这就是杀死它的一点。那时你甚至可以确认事情还在发生?你是否输出日志文件并在应用程序被杀后看到活动? – SteveB