代码之家  ›  专栏  ›  技术社区  ›  Phil Kulak

iOS 4是否为第三方开发者提供了真正的多任务处理?

  •  10
  • Phil Kulak  · 技术社区  · 14 年前

    自从第一个测试版问世以来,我就一直在尝试找出“真正的”多任务是否可能,也就是说,你能把一个程序放在后台,让它无限期地挂在网络连接上吗?

    例如,我在考虑IM或IRC应用程序。我自己在iOS 4上编译了一个应用程序,但没有改变它。 出现 一直在后台运行,但据我所知,它只是暂时挂在了内存中。

    医生们说,你能做的最好的就是请求10分钟,但是在开发者演示中,他们展示了Skype坐在后台,然后通知用户有来电。有人知道这一切是如何运作的吗?

    10 回复  |  直到 13 年前
        1
  •  10
  •   Yann Ramin    14 年前

    答案似乎是否定的。Skype的API是一种非常特殊的情况,称为“VoIP”模式,需要特殊的行为,例如标记VoIP使用的套接字。

    您可以在后台接收警报通知(如时间流逝)。您处于后台运行状态的时间量受到操作系统的严重限制。

    安卓的背景模型是完整的,在很多方面都更好。

    苹果有一个名为“支持应用程序中的多任务处理”的指南,您应该能够找到它。

        2
  •  8
  •   Alex Ford    14 年前

    苹果的iOS4开发者文档非常清楚地概述了这一切。

    当你的应用程序关闭或关闭时,它几乎立即被“暂停”,这意味着操作系统会冻结应用程序的状态。当用户切换回你的应用程序时,你的代码会一直运行在它关闭的地方。你不 需要 要向应用程序添加任何代码来完成此操作,只需针对OS4编译它。

    在大多数情况下,上述情况是正确的。“暂停”模式可能不适用有两个原因:

    1)如果设备开始运行内存不足,操作系统将开始终止暂时未切换到的挂起应用程序,而不发出警告。这就是为什么让你的应用记住它的状态对你最有利的原因,所以如果你的应用被终止,然后重新打开,用户不会真正注意到,因为它仍然回到他们离开的地方。

    2)您的应用程序使用“后台”API之一。这些服务用于音频播放、VoIP服务或定位服务。在这种情况下,应用程序可以在后台继续运行,但只能访问这些API。此外,您的应用程序可以将某些长时间运行的任务指定为“后台任务”,这些任务需要在应用程序挂起或终止之前完成,例如将图片上载到Flickr或渲染视频等。

    “后台任务”方法不会无限期地覆盖ping服务器,因为该任务有一个时间限制,之后将强制停止。像以前一样,需要这种功能的应用程序应该实现推送通知。

    这应该可以解决这个问题。总之,我认为这是一个相当优雅的解决方案,可以在移动设备上进行多任务处理。

        3
  •  1
  •   Kevin Sylvestre    14 年前

    iOS 4应用程序可以是 运行 暂停的 . 操作系统将尽可能多地将请求的应用程序保存在内存中,而所有其他应用程序都将挂起。

    在中运行的应用程序 背景 可以访问导航、音频和VoIP等功能(但是 不是 即时消息)。看来你可能走运了。

    —— PC World Multitasking on Apples iPhone 4

        4
  •  1
  •   Moshe    14 年前

    应用程序可以请求后台时间。阅读文档。我会说iOS是“受控多任务处理”。

        5
  •  1
  •   William Denniss    14 年前

    你可以创建一个长期运行的后台任务,我相信这些可以包括网络功能。只需在工作块上设置后台任务标志。

    https://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

    操作系统可以精确地限制你通过的时间…它会告诉你什么时候你的时间到了,给你一个很好的清理的机会。

        6
  •  1
  •   Christian Fries    14 年前

    iOS4在某种程度上具有“真正的”多任务处理功能。有两件事要考虑:

    • UI事件循环是单个任务。所以只有前端应用程序在UI事件循环上执行。没什么大不了的:将主代码从UI事件循环中分离出来(也许你需要重新设计你的应用程序)。
    • 如果满足某些条件(例如内存不足),操作系统“可能”会终止应用程序。

    目前这些标准之一是执行时间限制在10分钟(实时而非CPU时间)。不过,我希望这会有所改变,并看到更好的后台应用程序终止标准(我希望如此)。

    除此之外,你还可以 timers (event loops) in background .

        7
  •  1
  •   IPhoneCrazy    14 年前

    iOS 4.2甚至没有真正的多任务处理。因为应用程序只能完成与状态相关的任务..时间间隔很短,然后它将处于挂起状态..如果您要设置长时间间隔的后台任务,那么…当您尝试从任何地方运行应用程序时,它的行为都将出乎意料,就像不会调用任何方法一样。

        8
  •  0
  •   anthony    14 年前

    你可能对 this blog post 这概述了“多任务”在iPhoneOS4和Android等系统中的工作原理。

        9
  •  0
  •   Brad Larson    13 年前

    事实上,你可以这样做,尽管苹果不允许这样做。你必须在你的Mac上建立一个工具链,使用一些非官方的软件开发工具包…

    检查 http://code.google.com/p/iphone-backgrounder/ 更多信息

        10
  •  0
  •   schwabsauce    13 年前

    您应该为正在创建的功能集使用推送通知框架!