【问题标题】:Doing work that takes a long time when app has been backgrounded在应用程序后台运行时执行需要很长时间的工作
【发布时间】:2011-06-05 20:24:30
【问题描述】:

我想要一种方法在后台工作,直到用户指定的持续时间(比如说 20 分钟)过去。我知道这是不可能的,因为 Apple 允许该应用程序在后台最多运行 10 分钟。不幸的是,FireDate 仅适用于 UILocalNotifications。我还阅读了有关performSelector:Selector:WithObject:afterDelay: 方法的信息,但我不确定这是否可以在后台运行。请给我建议和代码 sn-ps(如果有的话)。

【问题讨论】:

  • 您希望在后台进行什么类型的处理?
  • 您的问题到底是什么?我看到很多对话,但在任何地方都没有问号。 (另请注意,“双点”.. 不是英文标点符号。)
  • @jeremy,首先抱歉 (..)。其次,有人问我在后台线程中发送我自己的方法的最佳方式。
  • @blounty,我想要与铃声音量进行非常简单的交互。 @bshirley,是的,它的 IOS 4.0

标签: objective-c cocoa-touch ios background multitasking


【解决方案1】:

两种有用的方法:

NSObject-(void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg

UIApplication - (UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler:(void(^)(void))handler

如果您希望用户重新启动,可以使用本地通知,但如果他们不点击进入应用程序,那么您的应用程序永远不会知道它

【讨论】:

  • 感谢您的回复,我完全了解您提到的第二种方法“beginBackgroundTaskWithExpirationHandler”,它不允许我们的应用程序在后台停留超过 10 分钟,所以我没有用,因为在我的情况下用户也可以给60分钟!如果我的应用程序被用户终止,我不确定 performSelectorInBackground 是否会起作用??
  • 还有一件事要问,performSelectorInBackground 中的 Selector(这将是我的自定义方法)是否允许传递参数??
  • performSelector 方法在后台进程中运行您的方法,您可以向它传递一个参数 - 第二个可能需要在您启动时调用,可能在邮件线程上后台进程,就像你说的那样,他们估计需要 10 分钟,但不能保证它会那么长,或者他们在某些时候不会允许更多 - 需要运行一个小时的东西似乎值得怀疑,你确定吗没有更好的解决方案(比您希望的蛮力解决方案?)
  • 如果您在后台运行定位服务、音频播放或VOIP,还有其他解决方案Background Execution
  • 非常感谢您的解释 :) 先生,我的应用程序的场景需要在后台运行,这就是我想要正确使用它的原因。我从某处了解到,在 IOS 4 中,如果您想使用 beginBackgroundTaskWithExpirationHandler ,则没有时间限制。我会尝试这两件事然后让你知道。再次非常感谢您的指导:)
猜你喜欢
  • 2018-01-09
  • 1970-01-01
  • 2016-09-08
  • 2017-12-31
  • 1970-01-01
  • 2021-09-19
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
相关资源
最近更新 更多