NSTimer,NSUrlConnection,应用程序处于后台状态时的NSThread行为

时间:2012-03-13 12:58:30

标签: ios4 nsurlconnection nstimer multitasking

我正在开发一个iOS应用程序。 我的要求是在常规时间间隔内查询特定的新闻服务(REST API)。我希望每天查询服务两次并更新我的sqllite数据库,即使应用程序处于后台状态。我的UI将使用从sqllite db获取的数据进行更新,而应用程序位于前台。

我的问题是,

  1. 是否可以连续在后台运行NSTimer?如果是,是 计时器在后台运行的最大时间限制(比如说10 几分钟或60分钟)?

  2. 是否可以使用发送下载文件的请求 NSUrlConnection并将文件保存到文件目录中 申请是在后台吗?

  3. 您的建议对我的项目设计非常有帮助。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

在iOS上无法实现您的目标:

任意应用无法在后台运行任意时间。

您可以尝试通过使用本地通知而不是NSTimer来安排更新来缓解部分问题。但是,这只会给你带来非常有限的时间来建立你的网络。

此时你应该问自己的问题可能是:
如果您每天只更新两次,那么当您的应用变为活动状态时启动下载有多糟糕?

答案 1 :(得分:0)

回答我自己的问题,以便对其他人有所帮助。

问题1:是否可以在后台持续运行NSTimer?

Ans:当应用程序处于后台状态时,Nstimer将无法运行。因此,背景中没有最大允许的计时器值。如果应用程序在正在进行的过程中进入后台,则[UIApplication beginBackgroundTaskWithExpirationHandler:]可用于完成正在进行的过程。具有此处理程序的操作系统允许的最长时间为10分钟。

问题2:当应用程序在后台时,是否可以使用NSUrlConnection发送下载文件的请求并将文件保存到文档目录?

<强>答: 以下给出的信息来自Apple文档。找到详细信息here

  

在iOS中,只允许特定的应用类型在后台运行:

     
      
  • 在后台播放用户可听内容的应用,例如音乐播放器应用
  •   
  • 随时向用户通知其位置信息的应用,例如导航应用
  •   
  • 支持互联网协议语音(VoIP)的应用
  •   
  • 需要下载和处理新内容的报亭应用
  •   
  • 从外部附件接收定期更新的应用
  •   

可以找到有关使用VOiP类型应用程序运行后台进程的信息here