0

我想在应用程序进入后台时设置警报,警报应该继续运行,当警报时间到期时,我想触发一个http请求。这可能吗?如果是这样,我应该使用 ASIHttprequest 吗?如果我使用 ASIHttprequest,我的应用会被拒绝吗?

4

1 回答 1

0

我不确定为什么您需要在您的应用程序处于后台时进行隐身下载。在您的应用程序运行时这样做有什么问题?那就是说...

是的,这是可能的。您可以使用各种技巧来让您的应用程序在后台运行;最简单的是“voip”,前提是您有一个打开的套接字(或只是一个 UDP 套接字,或者您可能只是告诉它您有一个 keepalive)和“音频”(但您必须继续播放音频,即使您播放的只是静音)。

我不推荐使用“voip”,除非你已经测试过电池消耗(如果你只连接/绑定到本地主机可能是可以接受的)。AFAIK,Skype 使用“voip”;它显着降低了电池寿命(iPhone 4 大约需要 16-24 小时;我没有等到足够长的时间才知道)。

我不推荐使用“音频”——我认为你需要播放一些东西(例如静音)才能让它工作,这可能会停止 iPod 应用程序。它几乎肯定会耗尽电池。

如果您想将下载延迟超过几分钟,我认为简单的“后台任务”不会起作用,因为 iOS 为您提供了最大时间(除非我错了,它基于您的应用程序使用的 CPU 时间,但我对此表示怀疑)。您可以使用以下内容进行检查:

-(void)applicationDidEnterBackground:(UIApplication*)application
{
  UIBackgroundTaskIdentifier taskId = [application beginBackgroundTaskWithExpirationHandler:^{NSLog(@"Task expired");}];
  NSTimeInterval backgroundTime = application.backgroundTimeRemaining;
  NSLog(@"Background task for %g seconds ...", (double)backgroundTime);
  [NSThread sleepForTimeInterval:backgroundTime - 1];
  NSLog(@"Background task finishing with %g seconds remaining ...", (double)application.backgroundTimeRemaining);
  [application endBackgroundTask:UIBackgroundTaskIdentifier];
}

请想想儿童电池!

于 2010-09-28T21:33:32.613 回答