我正在编写一个本地模块,该模块从我无法访问的封闭源框架二进制文件中调用函数。它阻止网络呼叫并激活网络指示灯。我希望能够在后台异步运行它,这是开箱即用的,但是当我这样做时,我得到了这个警告/错误,并且调用停滞了一点:
Main Thread Checker: UI API called on a background thread: -[UIApplication setNetworkActivityIndicatorVisible:]
如果在我的RN模块中使用以下代码将其放在主队列中,则调用将阻塞所有操作,直到完成。
- (dispatch_queue_t)methodQueue { return dispatch_get_main_queue(); }
这是暴露给JS的方法的示例:
RCT_REMAP_METHOD(createSession, userIDtoken:(NSString *)userIDtoken createSessionWithResolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject) { Boolean cOnnected= [_networkController startSession:userIDtoken isTest:true]; NSString *success = @"session created"; if (connected){ resolve(success); } else { NSError *error = [NSError errorWithDomain:@"ConnectionError" code:1 userInfo:nil]; reject(@"session_creation_failed", @"Cannot create sessions", error); } }
_networkController startSession
应该在后台运行而不会引发警告/错误,也不会阻塞主线程。有没有办法做到这一点?