2

当应用程序进入后台状态时,我需要在后台安排任务。我必须这样做才能每次调用远程服务,然后在远程服务发生某些事件时显示本地通知。(我知道它看起来像 RPN,是的,但由于某种原因我无法使用 PRM)

我试过这段代码:

- (void)applicationDidEnterBackground:(UIApplication *)application{

   [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^(void){
        remoteServiceCallThread = [[NSThread alloc] initWithTarget:self selector:@selector(doRemoteCall:) object:nil];
        [remoteServiceCallThread start];
   }];
}

- (void)applicationWillEnterForeground:(UIApplication *)application{
    [remoteServiceCallThread cancel];   
}

我在 doRemoteCall 选择器中放置了断点,放置不起作用。

也许我的方法不是最好的。如果您有任何其他技巧可以像我描述的那样执行此操作,我会接受。

谢谢你。

4

1 回答 1

2

您没有启动线程,它的初始化代码位于过期处理程序块中,它将在应用程序因超时关闭之前被调用:

在应用程序的剩余后台时间达到 0 之前不久将调用的处理程序。您应该使用此处理程序来清理并标记后台任务的结束。未能明确结束任务将导致应用程序终止。处理程序在主线程上同步调用,因此在通知应用程序时会暂时阻止应用程序的挂起。

如果您的应用程序不支持其中一种后台模式(gps、音频、voip),则该任务应仅活动 10 分钟(由 iOS 驱动)。

UIBackgroundTaskIdentifier如果用户将应用程序带到前台或任务时间即将结束(即调用处理程序块时),您还需要保留返回的引用以便能够将其标记为已结束。

于 2012-05-27T03:02:05.263 回答