当前位置: 首页 > 知识库问答 >
问题:

基于位置跟踪的iOS全职后台服务

贺聪
2023-03-14

我目前正在编写一个应用程序,它依赖于位置跟踪,并将有关位置的数据发送到服务器。然而,问题是它必须24/7运行,目前我正在经历每2-3天发生一次的随机崩溃。为了让应用程序在后台持续运行,我在beginBackgroundTaskWithExpirationHandler方法的右边放置了一个NSTimer,它位于ApplicationIdentinterBackground方法的后面。计时器每分钟执行一次,并停止/启动定位服务。

这是一个示例崩溃日志

代码基本上如下所示:

UIApplication *app = [UIApplication sharedApplication];
__block UIBackgroundTaskIdentifier bgTaskId = 0;

bgTaskId = [app beginBackgroundTaskWithExpirationHandler:^{
    NSTimer *t = [NSTimer scheduledTimerWithTimeInterval: 1 * 60.0 target: self selector: @selector(onTick) userInfo: nil repeats: YES];
    [t fire];

    if (bgTaskId != UIBackgroundTaskInvalid){
        [app endBackgroundTask: bgTaskId];

        bgTaskId = UIBackgroundTaskInvalid;
    }
}];

我使用GCDAsyncSockets进行连接,每个调用的超时时间约为30秒。

我真的没有主意了,崩溃发生的原因可能是什么?

共有1个答案

邢烨烨
2023-03-14

您的计时器可能会在任务无效后启动(在[UIApplication共享应用程序]之后)。

问题是你不能让应用程序在后台不断运行。如果你想每隔一段时间执行代码,你唯一的选择是使用后台位置应用编程接口,设置你的应用程序在其plist中使用位置后台模式。您将得到CLLocationManager委托回调,并且在调用这些方法时,您有一些时间来做一些工作。

有关背景模式,请参阅Apple留档:http://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html

和位置感知手册:http://developer.apple.com/library/ios/#DOCUMENTATION/UserExperience/Conceptual/LocationAwarenessPG/Introduction/Introduction.html#//apple_ref/doc/uid/TP40009497

 类似资料:
  • 为了创建一个位置跟踪系统(基于fusedlocationprovider),该系统必须跟踪一个人在特定时间段内的位置。 在特定的时间间隔内,需要广播位置,即使应用程序关闭,也不应终止服务。 我应该使用前台还是后台服务,或者两者结合使用,再加上一个解释会很有帮助。

  • 我正在开发一个示例应用程序,跟踪用户的位置在后台,但我不想离开位置服务始终启用,但我的计时器中的一些行为不正常。 我的想法是,每x分钟,服务就会继续,当它有一个正确的新位置时,它会再次发布,现在设置为10秒,只是为了测试。(明显的位置变化不起作用,不够准确) 我搜索了很多(iOS开发中心StackOverflow),发现了“新的”后台位置功能,它允许您在进入后台后10分钟内运行代码,使用的是启动后

  • 我正在构建一个在后台工作的iOS应用程序,并每3分钟将用户的位置发布到服务器上(因为这是iOS 7上的最长后台执行时间)。但是,有一个问题,后台服务在随机时间终止。所以有时候它可以在后台运行2个小时,有时候7个小时,然后3个小时,然后是随机的,依此类推。 下面的代码产生错误。我已经能够检测到它何时终止,也就是[UIApplication sharedApplication]何时终止。剩余的背景时间

  • 我的背景粘性服务是杀死奥利奥和更高的设备,任何解决方案,以获得位置的背景服务时,活动是在后台

  • 屏幕关闭时无法更新位置。 屏幕关闭后如何运行位置跟踪服务? 开启服务 在onLocationChanged方法中,我尝试Log. e(),但在屏幕关闭时不在logcat中显示纬度和经度 屏幕关闭时帮我介绍一下服务管理。谢谢你。

  • 我正在为中国开发一个需要GPS位置跟踪的android应用程序。对于位置跟踪,android需要访问Google play服务。但Google play服务在中国被屏蔽。 这个问题有解决办法吗?有没有推荐的第三方库或实现? 谢谢