我正在为iOS4开发一款应用。该应用程序由两个主要组件组成,一个应该在后台运行,另一个在屏幕上不断显示并从第一个中获取数据。这就是问题所在:第一个组件工作正常,直到它放在后台。此时它停止发送数据。这是为什么?有没有解决方法?
谢谢。
答案 0 :(得分:3)
如果您不使用VoIP,音频或GPS,则只能使用任务完成模式(后台限制为10分钟)。 要做到这一点,你必须通过以下方式告诉要启动任务的操作系统:
UIApplication* app = [UIApplication sharedApplication];
UIBackgroundTaskIdentifier bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
当你完成后,你可以用:
结束它[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
请记住,如果您的运行时间超过10分钟,则操作系统会终止您的应用。
在applicationDidEnterBackground:
中你遇到的问题是你的代码仍然阻塞了主线程,这就是为什么当你退出应用程序时它被杀死的原因。
如果你想开始在applicationDidEnterBackground:
中执行代码,你应该开始后台任务并发送你想做的任何事情dispatch_async(queue, block_with_your_code);
您可以阅读更多内容here
答案 1 :(得分:1)
如果没有,您只能在后台运行VOIP,音频或基于位置的应用。 因此,除非您的应用属于其中一个类别,否则无法让您的应用在后台运行。
答案 2 :(得分:1)
Apple只允许某些类型的应用在后台运行,例如导航和VOIP应用,仅举两例。但即便是那些仅限于必要的任务。
唯一的选择是“长跑背景任务” - 这允许应用程序在后台继续工作长达十分钟(此“宽限期”的确切持续时间可能会发生变化,afaik)。您可以在像Hipstamatic这样的应用程序上观察到这一点,即使将应用程序移动到后台,它也会在图像上完成后期制作。
答案 3 :(得分:1)
正如其他人指出的那样,没有真正的方法可以做到这一点,但有一些应用程序使用了解决方法。您基本上可以在后台播放用户iPod库中的曲目,这样您的应用就可以在后台保持较长时间的工作。您可以在Tapbots' site上了解更多相关信息。