应用程序冻结,同时在后台安排LocalNotifications

时间:2011-09-25 10:55:13

标签: objective-c ios background uilocalnotification

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    for (int i =0; i<30; i++){
       //add a local notification and schedule it
    }
}

当app切换到后台时,这些代码会在一段时间内冻结app。

2 个答案:

答案 0 :(得分:1)

默认情况下,当应用程序进入后台时,应用程序处理会冻结。执行从应用程序返回前台时离开的同一语句继续执行。要在后台执行代码,您必须将其包围在beginBackgroundTaskWithExpirationHandler块中。

http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/BackgroundExecution/BackgroundExecution.html查看在背景中完成有限长度任务部分。

HTH,

阿克沙伊

答案 1 :(得分:1)

没有关于UIApplication的文件是否是线程安全的 经过长时间的测试后,我发现大部分时间在背景上执行LocalNotification都很有效。但有时它只是崩溃我们的应用程序。

所以似乎所有带有'UI'前缀的类都不是线程安全的,你永远不应该在另一个线程上调用那些方法。

我的解决方案减少了LocalNotification的数量,它仍然会冻结应用程序,但我们可以接受这种小冻结。