• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 移动到后台后保持调度队列运行 5 秒

[复制链接]
菜鸟教程小白 发表于 2022-12-13 15:51:29 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

当用户将应用程序移至后台时,我正在使用串行调度队列来序列化一些网络请求。

- (void)applicationDidEnterBackgroundUIApplication *)application
{
    dispatch_queue_t opQ = dispatch_queue_create("com.myapp.network", NULL);
    dispatch_async(opQ, ^{
        [self sendNetworkData1];
        [self sendNetworkData2];
        [self sendNetworkData3];
    });
}

问题是,当它们在我创建的这个队列上运行时,应用程序即使在它应该保持的 5 秒内也不会保持事件状态。

相反,当我在队列外发送相同的请求时,它们的发送时间大约为 8 秒。但应用程序随后崩溃。

- (void)applicationDidEnterBackgroundUIApplication *)application
{
        [self sendNetworkData1];
        [self sendNetworkData2];
        [self sendNetworkData3];
}

我还想把剩下的写到磁盘上,以便下次用户打开应用时发送。

实现这一点的最佳方法是什么?



Best Answer-推荐答案


当应用程序进入后台时,如果它需要额外的时间来完成某些任务,您需要通知操作系统。详细文档在这里:http://developer.apple.com/library/ios/#DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html .这是一个快速而肮脏的补丁。

- (void)applicationDidEnterBackgroundUIApplication *)application
{
     __block UIBackgroundTaskIdentifier backgroundTask; //Create a task object

    backgroundTask = [application beginBackgroundTaskWithExpirationHandler: ^ {
        [application endBackgroundTask:background_task]; 
        backgroundTask = UIBackgroundTaskInvalid; //Set the task to be invalid
     }];

    dispatch_queue_t opQ = dispatch_queue_create("com.myapp.network", NULL);
    dispatch_async(opQ, ^{
        [self sendNetworkData1];
        [self sendNetworkData2];
        [self sendNetworkData3];
        [application endBackgroundTask:background_task]; 
        backgroundTask = UIBackgroundTaskInvalid; //Set the task to be invalid
    });
}

底线是您通知应用程序需要在后台运行 beginBackgroundTaskWithExpirationHandler: 然后当您完成后调用 endBackgroundTask: 通知操作系统您已完成后台处理。最后确保将 backgroundTask 变量重置为 UIBackgroundTaskInvalid。

关于ios - 移动到后台后保持调度队列运行 5 秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12145627/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap