【问题标题】:Is it legal to create a recursive background handler in iphone?(processing when app enters the background)在iphone中创建递归后台处理程序是否合法?(应用程序进入后台时处理)
【发布时间】:2011-09-30 12:13:33
【问题描述】:

如果我为后台应用程序注册了一个应用程序,并在确实进入后台并使用大约 10 分钟完成任务时创建了一个后台处理程序,则在时间结束后,处理程序将调用完成块,并在此块中再次创建你的后台处理程序将再次获得 10 分钟,依此类推,这样应用程序将保持在后台。我的意思是这样做可以吗....?还是苹果会反对?

【问题讨论】:

  • 你确定它甚至可以工作吗?我的猜测是操作系统无论如何都会杀死你的应用程序。

标签: iphone objective-c ios background-process


【解决方案1】:

来自documentation

运行后台任务的应用程序有有限的时间 运行它们。 (您可以使用 backgroundTimeRemaining 属性。)如果你不调用 endBackgroundTask:对于时间到期之前的每个任务,系统将杀死 应用程序。

所以,不,你不能无限期地在后台运行。

【讨论】:

    【解决方案2】:

    是的,没错,你不能以这种方式无限运行。但是我发现了另一个技巧,当应用程序进入后台时,开始播放 0 音量的音频:-) 你的应用程序永远不会被杀死。

    【讨论】:

    • 应用商店拒绝的理由。
    【解决方案3】:

    有一个 VoIP 应用程序 Media5,它可以使用 UDP 套接字在后台接收来电。

    开发人员说他们使用了一种“技巧”来保持应用程序永远处于活动状态,我会排除静音音频播放选项。那么问题来了:这是什么伎俩?

    Bria 也可以在后台使用 UDP 接收。

    【讨论】:

    • 允许在 iOS 上注册的 VoIP 应用程序“永远”在后台运行。
    【解决方案4】:

    来自Issue 515: Background app support for iPhones with multitasking support 的评论 20:

    我很确定如果不连续播放音频文件或 记录 GPS 位置,您无法保持活动 UDP 侦听套接字 iOS 4.3+(在主线程或辅助线程中)。如果你玩 使用 AVAudioPlayer 播放音频(在初始化 AudioSession 之后 之前)在每 5 秒一次的 nsrunloop 中,主线程保持活动状态 而且不需要声明音频背景 info.plist 中的支持。

    我认为这是 Media5 和 Bria 使用的“技巧”。我也试过 创建一个无限 TCP 流到声明它的环回接口 作为VoIP,只是为了看看UDP套接字是否也保持活动状态。答案是 不,只有 TCP 套接字在后台工作(和屏幕 锁定),UDP同时关闭,无法监听传入 不再打电话了。

    所以关键是主线程必须保持活跃...使用 单独一个简单的 nstimer 或无限运行循环是没有用的,因为 看门狗在后台几秒钟后终止进程(除非 您在附加了 GDB 接口的调试模式下工作,它会永远运行)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多