每 15-30 分钟在 iOS 上安排一个任务
Posted
技术标签:
【中文标题】每 15-30 分钟在 iOS 上安排一个任务【英文标题】:Schedule a task on iOS every 15-30 mins 【发布时间】:2015-03-20 10:00:36 【问题描述】:我有一个为 ios、android 和 windows phone 8 开发的应用程序。客户端现在要求该应用程序每 15-30 分钟检查一次是否有任何数据要上传到服务器,如果有,请上传.这是必需的,因为该应用程序用于没有互联网连接的区域。用户将数据添加到应用程序中,一旦互联网连接可用,则需要将数据上传到服务器
我已经在android上实现了这个,使用AlarmManager来安排应用程序检查是否有任何数据并上传,在windows phone上我使用了PeriodicTask。
iOS 中有这样的功能吗?当我尝试用谷歌搜索时,我会看到很多不同的东西,比如 NSURLSession、后台传输服务和其他说不可能的东西。
那么,这是可能的,我需要研究哪些类才能使其正常工作?如果我必须针对特定的 iOS 版本,那很好。
【问题讨论】:
应用程序每隔 15-30 分钟检查是否有任何数据要上传到服务器,如果有,请上传。 你的意思是下载吗? 不,我是说上传。用户在他们的设备上添加数据,然后这些数据需要上传到服务器。该应用程序允许用户在没有互联网连接的情况下输入数据 【参考方案1】:你可以使用 NSTimer:
[NSTimer scheduledTimerWithTimeInterval: 1800.0 target:self selector:@selector(yourselector) userInfo:nil repeats: YES];
Apple documentation
【讨论】:
【参考方案2】:不,这是不可能的,很可能。因为只有特定的应用程序可以在后台运行,例如:AudioStreamer、VOIP、附件伴侣或位置跟踪。
这些应用程序无法真正安排任务。此外,每 15-30 分钟检查一次服务器对电池来说真的很糟糕。
您可以使用NSURLSessions
创建将在后台运行的上传任务。
您必须正确设置会话并实现所有委托方法:Background Transfer Considerations。
【讨论】:
I 新数据在设备上,而不是在服务器上。数据需要上传到服务器。 @user2736022:所以新数据是在您的应用程序运行正确时创建的?因此,使用 NSURLSession 将其排入队列并上传。在这 15 到 30 分钟内,您可以使用 NSTimer @user2736022:这些新数据是如何进入设备的?它是由用户创建的吗?那你为什么需要每 15-30 分钟上传一次呢? 用户将新数据添加到应用程序中,但不能保证用户将拥有有效的互联网连接,因为应用程序用于不可使用的区域(下水道等)。因此,为什么其他平台上的后台服务会每 X 分钟运行一次并检查用户是否输入了需要上传的新数据,并在互联网连接可用时上传 您也许可以使用NSURLSession
来完成它,但无法构建像应用程序这样每隔几分钟检查一次的服务。【参考方案3】:
主要有3点需要考虑: 1.) 应用程序是否会保持活动状态(在设备屏幕上可见)15-20 分钟。我想情况不会如此。 2.) 当应用程序进入后台状态时(在应用程序屏幕上不可见,但在后台),您可以执行/计划任务最多 3 分钟。
3.) 如果用户终止了应用程序(应用程序未处于后台模式),那么您将无法执行任何操作。
【讨论】:
【参考方案4】:NSTimer *yourTimer = [NSTimer scheduledTimerWithTimeInterval: 1800.0 target:self selector:@selector(YourMethod) userInfo:nil repeats: YES];
请试试这个...这会奏效...
【讨论】:
即使应用程序在后台?【参考方案5】:上传任务默认支持后台操作(参考:https://developer.apple.com/reference/foundation/urlsessionuploadtask)。
但这仅限于应用程序在内存中。这是为了确保没有任何应用程序在没有绝对需要的情况下消耗电池。
您可以做的是在后台模式下上传,并在每次启动应用时检查待上传的数据。
【讨论】:
以上是关于每 15-30 分钟在 iOS 上安排一个任务的主要内容,如果未能解决你的问题,请参考以下文章