繁体   English   中英

iOS:如何在后台运行位置管理器

[英]ios: how run location manager in background

我想运行我在函数中所做的所有事情:

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
}

在后台。 我的页面中包含许多元素,并且我希望地图的负载不会阻止应用程序的使用。 当应用程序确实加载时,将初始化地图,并且用户必须等待几秒钟来加载地图。 我知道我们可以在后台做一些事情

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
    [self doWorkInBackground];
});

但是我不使用locationManager。因此,我希望在没有地图的情况下加载应用程序,并且在地图加载完成后将其显示在应用程序上。您能帮我吗?

是的,您应该将代码放在发布的异步块之间。 在从块中加载地图之后,您可以在视图控制器上调用另一个方法来显示地图。 您必须在主线程中执行此操作,否则您的家伙会陷入困境。

__weak typeof(self) weakSelf = self;    
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        // load your map here
        dispatch_async(dispatch_get_main_queue(), ^{
            [weakSelf mapWasLoaded];
        });
 });

__weak是为了避免内存因块泄漏。

把它放在info.plist文件中

<key> UIBackgroundModes</key>
    <string>location</string>

对我来说,它的工作)

另外,很好的教程! 我从它开始!

讲解

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM