IOS当后台服务调用我的应用程序挂起时

时间:2015-05-14 10:07:23

标签: ios objective-c nstimer background-service

以下是我用来调用5个不同服务以获取响应并将其存储在我的json文本文件中的代码。当后台服务调用正在运行时,我的应用程序正在挂起,没有触摸事件正在工作。后台服务调用它working.i不想在调用后台服务时挂起我的应用程序我该怎么做。

[NSTimer scheduledTimerWithTimeInterval:60.0 target:self
                      selector:@selector(checkAlert) userInfo:nil repeats:YES];

2 个答案:

答案 0 :(得分:1)

你可以使用Grand Central Dispatch(GCD),你可以编写代码在后台线程上进行一些处理,然后在主运行循环中对结果做一些非常简单和紧凑的事情:

dispatch_async( dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
   // Add code here to do background processing
   //
   //
dispatch_async( dispatch_get_main_queue(), ^{
    // Add code here to update the UI/send notifications based on the
    // results of the background processing
   });
});

如果想要添加延迟,那么也可以使用

// Delay execution of my block for 10 seconds.
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 10 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
   // call your method
});

答案 1 :(得分:0)

你实际上并没有在后台调用它,因为你的UI被冻结了。

dispatch_async( dispatch_get_global_queue(0, 0), ^{
  [NSTimer scheduledTimerWithTimeInterval:60.0 target:self selector:@selector(checkAlert) userInfo:nil repeats:YES];
});

但请注意,如果您需要更新UI,请在主线程中执行,否则UI相关任务将不会更新。