安排后台任务

Posted

技术标签:

【中文标题】安排后台任务【英文标题】:Schedule background tasks 【发布时间】:2016-11-02 02:49:01 【问题描述】:

我目前正在开发一个闹钟应用程序,我正在实现一个智能闹钟功能,我必须从服务器获取数据以确定是否是唤醒用户的正确时间。

比方说,情况是:

闹钟设置为上午 06:30

智能警报功能设置为 06:30 前 30 分钟,从早上 06:00 到早上 06:25 开始,每隔 5 分钟,数据提取将发生 5 次

如果,比方说,在上午 06:15,服务器返回了唤醒用户所需的数据,则所有计划的任务都将立即取消 当前时间是晚上 11:30 晚上 11:30 到早上 06:00 期间不会执行智能警报的任务

【问题讨论】:

您无法在 ios 上为特定时间安排后台操作。对于您的场景,您需要一个服务器在需要时向设备发送推送通知。 保罗说的是实话。保罗,您应该发表您的评论作为答案,以便 OP 可以接受它。 @Paulw11 请发表您的评论作为答案 @Orange 你找到解决办法了吗?? 【参考方案1】:

您可以使用推送通知/静默推送通知来完成此任务。 请注意,用户必须选择加入推送通知才能使用。 以下是您如何实现它的概述

只要用户设置了警报,就通过网络服务将这个时间发送到服务器。 服务器会向 APNS 发送推送通知负载,并根据设备令牌重定向到 App。 一旦设备收到通知负载,就会调用委托。您可以处理此负载中与警报相关的数据或调用 Web 服务。 使用 beginBackgroundTaskWithExpirationHandler 执行您的 5 分钟间隔任务。 beginBackgroundTaskWithExpirationHandler 从操作系统请求额外的时间来执行任务。 Apple 并未(有意)指定此额外时间有多长,但实际上约为 10 分钟。

请详细阅读:推送通知、静默推送通知和后台任务处理程序。


Background Fetch API:在 iOS 7 中,Apple 增加了对后台 fetch 的支持——一种智能的、每个应用程序的 crontab,它在机会时唤醒。没有办法强制后台提取以精确的时间间隔执行。 iOS 在安排未来的回调时会检查在之前的后台获取期间使用了多少数据和电池电量。 添加支持涉及编辑应用程序的属性列表(请参阅 UIBackgroundModes)并在应用程序生命周期的早期设置获取间隔

More Details Here

【讨论】:

之前说过,服务器不会做任何推送通知,因为服务器不是我们处理的。所以我别无选择,只能进行重复的预定背景调查。但是感谢您的详细解释。

以上是关于安排后台任务的主要内容,如果未能解决你的问题,请参考以下文章

每小时安排后台任务swift 4

at: 安排一个任务在未来执行,需要一个atd的系统后台进程

在后台任务中安排通知

点餐系统设计任务安排

iPhone:重复后台任务

详解java定时任务