设备锁定时后台任务停止了吗?

托尼·劳

当设备进入后台时,我有一个计时器在运行,因为我想检查服务中的少量数据。我在应用程序委托的applicationDidEnterBackground方法中使用以下代码

    UIApplication *app = [UIApplication sharedApplication];

//create new uiBackgroundTask
__block UIBackgroundTaskIdentifier bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
    [app endBackgroundTask:bgTask];
    bgTask = UIBackgroundTaskInvalid;
}];

//and create new timer with async call:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    //run function methodRunAfterBackground
    NSString *server = [variableStore sharedGlobalData].server;
    NSLog(@"%@",server);
    if([server isEqual:@"_DEV"]){
        arrivalsTimer = [NSTimer scheduledTimerWithTimeInterval:30 target:self selector:@selector(getArrivals) userInfo:nil repeats:YES];
    }
    else {
        arrivalsTimer = [NSTimer scheduledTimerWithTimeInterval:300 target:self selector:@selector(getArrivals) userInfo:nil repeats:YES];
    }
    [[NSRunLoop currentRunLoop] addTimer:arrivalsTimer forMode:NSDefaultRunLoopMode];
    [[NSRunLoop currentRunLoop] run];
});

这绝对可以正常工作,直到设备自动锁定,然后计时器停止计时。关于如何阻止这种情况的任何建议?默认的直播时间是5分钟,因此大多数设备都将被锁定很长时间,甚至不会触发一次。

谢谢

一些观察:

  1. 正如H先生所指出的,beginBackgroundTaskWithExpirationHandler在现代iOS版本中仅给您三分钟(180秒)的时间。因此,尝试在五分钟内触发计时器不会成功。

    您可以[[UIApplication sharedApplication] backgroundTimeRemaining]用来查询还剩多少时间。

  2. 设备锁定后,后台任务继续。您不应看到该应用终止。如果用户通过“双击主屏幕按钮并在任务切换器屏幕上向上滑动”手动终止应用程序,则将终止后台任务,而不仅仅是锁定设备。

  3. 关于计时器的一些评论:

    • 该代码将计时器添加到后台队列。通常没有必要。仅仅因为该应用程序处于后台状态,您仍然可以继续将主运行循环用于计时器等。

      因此,只需scheduledTimerWithTimeInterval从主线程进行调用就可以完成。除非绝对必要,否则在运行循环中使用GCD工作线程是没有意义的(即使那样,我可能会创建自己的线程并向其中添加运行循环)。

      顺便说一句,如果绝对需要在某个后台调度队列上调度计时器,那么使用调度计时器可能会更容易。它完全消除了运行循环的要求。

    • 顺便说一句,它不适合使用scheduledTimerWithTimeIntervaladdTimer您调用scheduledTimerWithTimeInterval创建一个计时器并将其添加到当前运行循环中。如果要将其添加到另一个运行循环中,timerWithTimeInterval使用,然后调用addTimer

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Windows Phone后台任务过早停止

来自分类Dev

如何在travis上启动和停止后台任务?

来自分类Dev

后台任务-如何以受控方式停止?

来自分类Dev

如何启动和停止周期性的后台任务?

来自分类Dev

寻找停止后台任务/创建基准模式的方法

来自分类Dev

将来在特定时间在iOS中运行后台任务

来自分类Dev

在Windows Phone 8.1应用中的一天中的特定时间触发后台任务

来自分类Dev

Windows Phone 8.1应用中的后台任务在一天中的特定时间触发

来自分类Dev

使用PushNotificationTrigger()的后台任务

来自分类Dev

Grails和后台任务

来自分类Dev

IntentService用于后台任务

来自分类Dev

禁用后台任务

来自分类Dev

注销uwp后台任务

来自分类Dev

UWP 后台任务 - ExecutionTimeExceeded

来自分类Dev

UWP FileWatcher 后台任务

来自分类Dev

Powershell 中的后台任务?

来自分类Dev

Kubernetes 中的后台任务

来自分类Dev

设备锁定时停止播放android应用程序的音频

来自分类Dev

设备锁定时停止播放android应用程序的音频

来自分类Dev

如何在Windows WinRT / c#的设备/应用程序启动中启动后台任务

来自分类Dev

请求从Apple Watch(Watch OS 2.0)在父设备上运行的后台任务

来自分类Dev

如何在Windows WinRT / c#的设备/应用程序启动中启动后台任务

来自分类Dev

javafx:当从“可观察列表”中删除对象本身时,如何停止对象的后台任务运行?

来自分类Dev

条件变量的 .wait_for() 是在特定时间间隔执行后台任务的有效方法吗?

来自分类Dev

当本机应用程序在后台/设备锁定时,如何防止socket.io断开连接?

来自分类Dev

在后台应用程序或设备锁定时,从不触发didEnterRegion()/ didExitRegion()

来自分类Dev

启动时运行后台任务

来自分类Dev

持久后台任务Django + Heroku

来自分类Dev

iOS App运行后台任务时间

Related 相关文章

  1. 1

    Windows Phone后台任务过早停止

  2. 2

    如何在travis上启动和停止后台任务?

  3. 3

    后台任务-如何以受控方式停止?

  4. 4

    如何启动和停止周期性的后台任务?

  5. 5

    寻找停止后台任务/创建基准模式的方法

  6. 6

    将来在特定时间在iOS中运行后台任务

  7. 7

    在Windows Phone 8.1应用中的一天中的特定时间触发后台任务

  8. 8

    Windows Phone 8.1应用中的后台任务在一天中的特定时间触发

  9. 9

    使用PushNotificationTrigger()的后台任务

  10. 10

    Grails和后台任务

  11. 11

    IntentService用于后台任务

  12. 12

    禁用后台任务

  13. 13

    注销uwp后台任务

  14. 14

    UWP 后台任务 - ExecutionTimeExceeded

  15. 15

    UWP FileWatcher 后台任务

  16. 16

    Powershell 中的后台任务?

  17. 17

    Kubernetes 中的后台任务

  18. 18

    设备锁定时停止播放android应用程序的音频

  19. 19

    设备锁定时停止播放android应用程序的音频

  20. 20

    如何在Windows WinRT / c#的设备/应用程序启动中启动后台任务

  21. 21

    请求从Apple Watch(Watch OS 2.0)在父设备上运行的后台任务

  22. 22

    如何在Windows WinRT / c#的设备/应用程序启动中启动后台任务

  23. 23

    javafx:当从“可观察列表”中删除对象本身时,如何停止对象的后台任务运行?

  24. 24

    条件变量的 .wait_for() 是在特定时间间隔执行后台任务的有效方法吗?

  25. 25

    当本机应用程序在后台/设备锁定时,如何防止socket.io断开连接?

  26. 26

    在后台应用程序或设备锁定时,从不触发didEnterRegion()/ didExitRegion()

  27. 27

    启动时运行后台任务

  28. 28

    持久后台任务Django + Heroku

  29. 29

    iOS App运行后台任务时间

热门标签

归档