如何在应用程序运行 ios 时在后台进行服务调用

Posted

技术标签:

【中文标题】如何在应用程序运行 ios 时在后台进行服务调用【英文标题】:How can I make a service call in background while app is running ios 【发布时间】:2016-12-15 12:17:40 【问题描述】:

任何人都知道。在用户与特定屏幕交互期间如何进行服务调用。我的意思是我需要在用户与应用程序交互时调用其他数据。但它看起来仍然像设备挂起。请帮帮我。

【问题讨论】:

显示您的代码。 “但它看起来仍然像设备挂起” - 由此,我认为 OP 试图这样做。 【参考方案1】:

获取请求使用此代码

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:@"http://example.com/resources.json" parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) 
    NSLog(@"JSON: %@", responseObject);
 failure:^(NSURLSessionTask *operation, NSError *error) 
    NSLog(@"Error: %@", error);
];

NSURL *URL = [NSURL URLWithString:@"http://example.com/resources/123.json"];
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
[manager GET:URL.absoluteString parameters:nil progress:nil success:^(NSURLSessionTask *task, id responseObject) 
    NSLog(@"JSON: %@", responseObject);
 failure:^(NSURLSessionTask *operation, NSError *error) 
    NSLog(@"Error: %@", error);
];

【讨论】:

【参考方案2】:

由于您没有提到任何代码 sn-p,我假设您正在 main 线程上执行所有操作,这就是您的应用挂起的原因。具体到main 线程和background 线程,我们在main 线程和background 线程上执行所有与UI 相关的任务。因此您可以为您的background 任务创建另一个线程像这样:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^
    //Perform your background task here
);

【讨论】:

@Cristik 正如我已经提到的,提问者没有发布任何代码 sn-p,所以我无法确切知道该代码放在哪里。但我的回答包括问题背后的原因以及提问者可以放在适当位置的解决方案。

以上是关于如何在应用程序运行 ios 时在后台进行服务调用的主要内容,如果未能解决你的问题,请参考以下文章

React Native:关闭应用程序时在 iOS 上运行后台任务的最佳方法?

iOS保持线程在后台运行

应用程序运行时在 iOS 中抑制/隐藏推送通知

如何在启动时在后台运行django服务器?

如何让我的应用在 iPhone 上后台运行?

在启动时在iOS中启动位置感知后台服务