【问题标题】:IOS background workIOS后台工作
【发布时间】:2012-06-04 13:05:57
【问题描述】:

我有一个 iPhone 应用程序,例如 iPhone 版 facebook。我的应用程序必须连接我的服务器并定期每两个小时读取一次所有消息。我有一个线程来读取所有消息,但是当应用程序终止时,线程无法工作。线程能否独立于主委托运行,或者我如何找到解决此问题的方法?

【问题讨论】:

    标签: iphone ios multithreading background-process background-thread


    【解决方案1】:

    您不能让您的应用在后台执行操作。有一个 API 可以完成上传照片之类的任务,但即使这样也会在大约 10 分钟后被杀死。

    Apple Push Notification Service 似乎是最适合您的问题的解决方案。您的服务器会通知设备发生了新的事情,并在用户打开应用程序时获取实际消息。

    编辑:从 iOS 7 开始,Apple 实现了一项功能,您可以安排正在运行的任务以在后台获取数据。这些任务不能保证在任何特定时间运行。请参阅release notes for iOS 7 和下面的链接方法:

    通过联系服务器定期更新其内容的应用可以 向系统注册并定期启动以检索该 背景中的内容。要注册,请包含 UIBackgroundModes 在应用的 Info.plist 文件中使用获取值作为键。那么,当 您的应用程序已启动,请致电setMinimumBackgroundFetchInterval: 方法来确定它接收更新消息的频率。最后, 您还必须实施 application:performFetchWithCompletionHandler: 应用程序中的方法 委托。

    【讨论】:

    • 我打算写同样的,但@klaustopher 是第一个。如果您订阅了 iOS 开发者,则可以观看 WWDC 视频或文档。他们在那里解释得很清楚。
    • 我尝试了 NSNotification 但如果指定时间没有新消息,则 NSNotification 不会再运行一次。是否有您的 arshive 示例代码,您可以分享一下吗?
    • 如何实现推送通知服务的例子很多。如果您还编写服务器代码,只需 google 搜索“apple push notification service {your language}”。如果您无权访问服务器,则需要创建某种代理,该代理在服务器上定期运行,从原始服务器中提取信息并将信息推送给用户 iPhone
    • " 有一个 API 可以完成上传照片之类的任务,但即使这样也会在 30 秒后被杀死。"如果您正在使用 shouldBeginBackgroundTaskWithExpirationHandler ,它允许大约 10 分钟的执行时间。如果你不是在谈论那个,那你指的是哪个 API?
    • 没错,我改变了答案。我记得在一次 WWDC 会议上,他们提到了 30 秒,因为我从未使用过它,所以我没有跟进这个数字。但是文档没有提到任何明确的时间框架,所以这可能会发生变化。
    【解决方案2】:

    没有解决办法。

    Apple 不允许应用程序在后台运行,除非它们属于特定类型,例如位置或音频或 voip 或报摊(如果使用 shouldBeginBackgroundTaskWithExpirationHandler,您的应用程序可以在其处于活动状态后继续运行大约 10 分钟)。

    没有解决方法,许多其他人都想知道如何做和自己一样的事情,但没有合法的方法。您的应用无法安排任何类型的定期回拨活动。

    一旦您的应用程序进入暂停或终止状态,它唯一可以运行的方式是让用户启动它,无论是显式启动它,还是响应本地通知或远程推送通知。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      • 2015-09-15
      • 1970-01-01
      • 2018-02-19
      • 2020-08-17
      • 1970-01-01
      相关资源
      最近更新 更多