iOS 每天运行一次代码

标签 ios timer background

这个应用背后的想法非常简单:下载一个文件。然而,这个应用程序将适用于并不总是在互联网访问范围内的人,所以我需要它知道在上午 9:00 将文件下载到硬盘驱动器。应用程序中也会有一个按钮可以手动执行此操作,但我已经开始使用了。

据我了解,即使有可能,这也很困难。我知道 iOS 不喜欢多任务处理,但我也知道它确实允许后台计时器功能。我愿意接受任何人可能需要完成此任务的任何建议,即使这意味着要编写一个单独的应用程序。谢谢。

编辑:我看到有可能使用通知,甚至日历。该类别的想法也受到欢迎。

编辑 2:我还读到一些关于外部服务器启动应用程序的内容,但没有给出任何描述。

最佳答案

这里是关于后台执行、通知和计时器等的情况,与应用程序安排某些事件定期发生有关。

  1. 应用不能在后台执行,除非:

    1. 它向操作系统请求额外的时间来执行此操作。这是使用 beginBackgroundTaskWithExpirationHandler 完成的。 Apple 没有(有意)指定这个额外时间有多长,但实际上大约是 10 分钟。

    2. 一个应用程序有一个后台模式,这些模式是:voip、音频、位置、newstand。即使它具有这些类型之一,应用程序也无法在没有某些限制的情况下执行。本讨论的其余部分假定该应用没有后台模式。

  2. 当一个应用程序被挂起时,它无法做任何事情来直接唤醒自己。它之前不能安排一个 NSTimer,它不能使用像 performSelector:afterDelay 这样的东西。等等

    应用再次激活的唯一方法是用户执行某些操作使其激活。用户可以通过以下方式执行此操作:

    1. 直接从其图标启动应用

    2. 启动应用以响应应用先前在其处于事件状态时安排的本地通知。

    3. 启动应用以响应服务器发送的远程通知。

    4. 其他一些:例如 URL 启动,如果应用注册为处理通过 url 启动;或者如果它注册为能够处理某种类型的内容。

如果本地/远程通知触发时某个应用程序位于前台,则该应用程序会直接接收它。

如果本地/远程通知触发时应用程序当前不在前台,则应用程序不会收到它。通知触发时没有执行任何代码!

只有当用户选择通知时,应用才会激活并可以执行。

请注意,用户可以禁用整个设备或特定应用程序的通知,在这种情况下,用户永远不会看到它们。如果设备在通知触发时关闭,则通知将丢失。

关于iOS 每天运行一次代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10903568/

相关文章:

ios - 使用断点记录字典中特定键的值

java - 如何在 n 秒后停止 Swing 计时器?

java - 即使用户关闭应用程序后,是否可以让倒计时器继续运行

ios - Swift 中的货币格式

ios - 在没有麦克风权限的情况下在iOS7中使用蓝牙声音设备

iphone - UILabel的两种颜色背景

ios - 在 iOS 中为推送通知发送报告

android - Flutter简单后台定时器示例

ios - 透明的 GPUImageView?

delphi - Windows服务中的定时器队列