【发布时间】:2012-06-04 13:05:57
【问题描述】:
我有一个 iPhone 应用程序,例如 iPhone 版 facebook。我的应用程序必须连接我的服务器并定期每两个小时读取一次所有消息。我有一个线程来读取所有消息,但是当应用程序终止时,线程无法工作。线程能否独立于主委托运行,或者我如何找到解决此问题的方法?
【问题讨论】:
标签: iphone ios multithreading background-process background-thread
我有一个 iPhone 应用程序,例如 iPhone 版 facebook。我的应用程序必须连接我的服务器并定期每两个小时读取一次所有消息。我有一个线程来读取所有消息,但是当应用程序终止时,线程无法工作。线程能否独立于主委托运行,或者我如何找到解决此问题的方法?
【问题讨论】:
标签: iphone ios multithreading background-process background-thread
您不能让您的应用在后台执行操作。有一个 API 可以完成上传照片之类的任务,但即使这样也会在大约 10 分钟后被杀死。
但Apple Push Notification Service 似乎是最适合您的问题的解决方案。您的服务器会通知设备发生了新的事情,并在用户打开应用程序时获取实际消息。
编辑:从 iOS 7 开始,Apple 实现了一项功能,您可以安排正在运行的任务以在后台获取数据。这些任务不能保证在任何特定时间运行。请参阅release notes for iOS 7 和下面的链接方法:
通过联系服务器定期更新其内容的应用可以 向系统注册并定期启动以检索该 背景中的内容。要注册,请包含 UIBackgroundModes 在应用的 Info.plist 文件中使用获取值作为键。那么,当 您的应用程序已启动,请致电setMinimumBackgroundFetchInterval: 方法来确定它接收更新消息的频率。最后, 您还必须实施 application:performFetchWithCompletionHandler: 应用程序中的方法 委托。
【讨论】:
没有解决办法。
Apple 不允许应用程序在后台运行,除非它们属于特定类型,例如位置或音频或 voip 或报摊(如果使用 shouldBeginBackgroundTaskWithExpirationHandler,您的应用程序可以在其处于活动状态后继续运行大约 10 分钟)。
没有解决方法,许多其他人都想知道如何做和自己一样的事情,但没有合法的方法。您的应用无法安排任何类型的定期回拨活动。
一旦您的应用程序进入暂停或终止状态,它唯一可以运行的方式是让用户启动它,无论是显式启动它,还是响应本地通知或远程推送通知。
【讨论】: