0

我有一个 iOS 应用程序,它定期将记录插入 Azure 移动服务数据库。当应用程序变为非活动状态时(即,当我的应用程序委托的 applicationWillResignActive 方法被调用时)我想插入一条记录来告诉我的 AMS 应用程序客户端会话已经结束。

当我尝试从 applicationWillResignActive 或 applicationDidEnterBackground 插入记录时,永远不会到达完成块。为了防止应用程序委托方法在 AMS 插入完成之前返回,我尝试调用 usleep 以在循环中延迟 100 毫秒,同时检查我在插入完成块中设置的标志。

我怀疑当我处于这种状态时,AMS 客户端库所需的运行循环或操作队列没有得到服务,但 AMS 客户端库文档没有足够的细节来判断是否是这种情况。

这似乎是一个很常见的情况——还有其他人遇到过这种情况吗?

4

1 回答 1

0

我很确定从 applicationWillResignActive 发出网络请求是不被 iOS 反对的。此方法用于清理内容,而不是使用额外的资源。但是,您可以要求 iOS 让您的应用程序在后台运行一段时间。你应该能够做这样的事情:

UIBackgroundTaskIdentifier taskID = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{

    //Perform call to mobile service
    myservice.dosomething(Completion:^{
        //Call to mobile service is done
        [[UIApplication sharedApplication] endBackgroundTask:taskID];
    });

}];

这应该使您能够拨打电话,然后得到回复。请记住,如果 iOS 愿意,它仍然可以在此完成之前终止您的应用程序。

于 2013-08-07T23:52:45.890 回答