如何每小时在后台运行约 30 秒的进程(iphone 应用程序)

Posted

技术标签:

【中文标题】如何每小时在后台运行约 30 秒的进程(iphone 应用程序)【英文标题】:How to run a ~30sec process in the background every hour (iphone app) 【发布时间】:2011-11-09 15:31:55 【问题描述】:

我有一个 iphone 应用程序,它有一个 30 秒的进程来执行一些网络 IO。基本上,当应用程序在后台运行时,我希望这个进程每小时运行一次(实际上是一天一次,但如果它失败了,我希望它在一个小时内重新运行)。

有了ios 4的后台功能,这可能吗?如果是这样,怎么做?我会遇到什么限制?

非常感谢!

【问题讨论】:

我做了很多研究,发现“静默推送通知”对我有用。查看***.com/questions/35987366/… 【参考方案1】:

查看有关在后台运行代码的 Apple 文档。

http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/BackgroundExecution/BackgroundExecution.html

处理后台任务的方法很少。唯一可以拥有完全后台进程的应用是“audio”、“voip”和“location”应用,这需要在 Info.plist 中声明。

如果您的应用不是这种类型,您可能会发现很难轻松地做自己想做的事。有一些方法可以让您的应用在后台运行一段有限的时间(也在该链接上),但最终您的应用将被关闭。

本地通知只会提示用户打开应用程序 - 您真的希望每 30 秒在手机上弹出一个警报吗?

【讨论】:

看起来没有办法做我想做的事。谢谢你告诉我。 此答案中的链接已失效。您可以在developer.apple.com/library/ios/#documentation/iPhone/…developer.apple.com/library/ios/#documentation/iPhone/… 找到当前 iOS 文档中有关后台处理的信息 我在我的应用程序中使用了位置信息,但是一旦我进入后台并在那里停留超过 30 秒,我的应用程序就会被杀死。【参考方案2】:

我正在做一些类似的研究,看看this SO answer,以防你之前没有找到它。像 DataMan 或 Data Usage 这样的应用程序必须在后台定期执行某种代码,所以我不是 100% 相信你所要求的是不可能的..

【讨论】:

看起来很吸引人,但我很确定这种 hacky 解决方案会让我立刻被踢出应用商店!【参考方案3】:

我相信使用本地通知会有所帮助.... 检查以下....

    http://developer.apple.com/library/ios/#documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/IPhoneOSClientImp/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW1

    应用程序可以创建和安排本地通知,然后操作系统在安排的日期和时间发送它。如果它在应用程序未在前台处于活动状态时提供它,它会显示警报、标记应用程序图标或播放声音——无论在 UILocalNotification 对象中指定什么。如果应用程序在前台运行,则没有警报、标记或声音;相反,如果委托实现它,则调用 application:didReceiveLocalNotification: 方法。

    代理可以检查通知的属性,如果通知在其 userInfo 字典中包含自定义数据,它可以访问该数据并相应地处理它。另一方面,如果本地通知仅标记应用程序图标,并且用户响应启动应用程序,则调用 application:didFinishLaunchingWithOptions: 方法,但选项字典中不包含 UILocalNotification 对象。

【讨论】:

本地通知允许您从跳板弹出警报消息、更新应用程序图标的徽章编号或播放声音。但它永远不会给你任何机会进行网络 I/O。 嗨,感谢您的信息。我根据以下内容在上面写了。 1. application:didReceiveLocalNotification:参考讨论。他们说它可能是 UILocalNotification 对象包含的任何内容。 2. 在 UILocalNotification 的概述部分:“委托可以检查通知的属性,如果通知在其 userInfo 字典中包含自定义数据,它可以访问该数据并相应地处理它。”....所以我认为 userinfo dict 可以有一个 URL 来调用,如果进程可以在后台进程允许的特定时间内完成,它可以调用它并处理数据

以上是关于如何每小时在后台运行约 30 秒的进程(iphone 应用程序)的主要内容,如果未能解决你的问题,请参考以下文章

每小时调用外部 API 并单独执行约 10000 行任务的作业

每小时安排后台任务swift 4

iPhone在后台运行周期性进程 - 电池优化方式

如何在 iPhone 的特定时间间隔内从后台执行位置

使用重复本地通知的 iPhone 警报

在几秒钟内多次调用 Healthkit 后台交付