我想在应用程序进入后台时设置警报,警报应该继续运行,当警报时间到期时,我想触发一个http请求。这可能吗?如果是这样,我应该使用 ASIHttprequest 吗?如果我使用 ASIHttprequest,我的应用会被拒绝吗?
问问题
1562 次
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 回答