RN 47 中的 JS 线程及 RunLoop
RCBridge 初始化时声明了一个 CADisplayLink
_jsDisplayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(_jsThreadUpdate:)];
在 _jsThreadUpdate
函数中,处理界面更新。这个 CADisplayLink
随后被加到 JS 线程对应的 RunLoop 中。
- (void)addToRunLoop:(NSRunLoop *)runLoop
{_runLoop = runLoop;[_jsDisplayLink addToRunLoop:runLoop forMode:NSRunLoopCommonModes];
}
RCTCxxBridge 声明了一个 thread
_jsThread = [[NSThread alloc] initWithTarget:selfselector:@selector(runJSRunLoop)object:nil];_jsThread.name = RCTJSThreadName;_jsThread.qualityOfService = NSOperationQualityOfServiceUserInteractive;[_jsThread start];
并为这个 thread 声明了要给 RunLoop
// copy thread name to pthread name
pthread_setname_np([NSThread currentThread].name.UTF8String);// Set up a dummy runloop source to avoid spinning
CFRunLoopSourceContext noSpinCtx = {0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
CFRunLoopSourceRef noSpinSource = CFRunLoopSourceCreate(NULL, 0, &noSpinCtx);
CFRunLoopAddSource(CFRunLoopGetCurrent(), noSpinSource, kCFRunLoopDefaultMode);
CFRelease(noSpinSource);RCT_PROFILE_END_EVENT(RCTProfileTagAlways, @"");// run the run loop
while (kCFRunLoopRunStopped != CFRunLoopRunInMode(kCFRunLoopDefaultMode, ((NSDate *)[NSDate distantFuture]).timeIntervalSinceReferenceDate, NO)) {RCTAssert(NO, @"not reached assertion"); // runloop spun. that's bad.
}
RunLoop 的调用方式之 performSelector

如下,原因是因为有如下调用:
if ([NSThread currentThread] == _jsThread) {[self _tryAndHandleError:block];} else {[self performSelector:@selector(_tryAndHandleError:)onThread:_jsThreadwithObject:blockwaitUntilDone:NO];}
在 RunLoop 上执行一函数
CFRunLoopPerformBlock(m_cfRunLoop, kCFRunLoopCommonModes, ^{ func(); });
Enqueues a block object on a given runloop to be executed as the runloop cycles in specified modes.
把 CADisplayLink
加到指定的 RunLoop 中,然后相应

_jsDisplayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(_jsThreadUpdate:)];
[_jsDisplayLink addToRunLoop:runLoop forMode:NSRunLoopCommonModes];
转载于:https://www.cnblogs.com/huahuahu/p/RN-47-zhong-de-JS-xian-cheng-ji-RunLoop.html
RN 47 中的 JS 线程及 RunLoop相关推荐
- rn在java中什么意思_[React Native Android 安利系列]RN中使用js调用java代码
欢迎大家收看react-native-android系列教程,跟着本系列教程学习,可以熟练掌握react-native-android的开发,你值得拥有: 书接上节,我们上节说道,如何控制原生andr ...
- 浅谈浏览器多进程与JS线程
引言 一直对浏览器的进程.线程的运行一无所知,经过一次的刷刷刷相关的博客之后,对其有了初步的了解,是时候该总结一波了. 进程.线程之间的关系 一个进程有一个或多个线程,线程之间共同完成进程分配下来的任 ...
- 如何在java中调用js方法
[java] view plain copy/* * 加载脚本引擎,并在java中调用js方法 */ public void test2() { ScriptEngineManager manager ...
- legend---十二、js中的js语句和函数和ready函数的关系是什么
legend---十二.js中的js语句和函数和ready函数的关系是什么 一.总结 一句话总结: 函数和全局变量不必放到ready函数中 语句(调用函数和全局变量)的必须放到ready函数中 1.在 ...
- (转)Java中的守护线程
Java的守护线程与非守护线程 守护线程与非守护线程 最近在看多线程的Timer章节,发现运用到了守护线程,感觉Java的基础知识还是需要补充. Java分为两种线程:用户线程和守护线程 所谓守护线程 ...
- 浅谈浏览器多进程与JS线程 1
面试被问到了浏览器线程,没答出来,最终还是感谢拿到了offer 对于浏览器的知识还是知道的太少了,开始恶补TAT 文章目录 一.进程.线程之间的关系 二.浏览器内的进程 三.浏览器内核(渲染进程) 四 ...
- Node.js 线程你理解的可能是错的
本文代码运行环境 系统:MacOS High Sierra Node.js:10.3.0 复制代码 Node.js是单线程的,那么Node.js启动后线程数是1? 答案:Node.js启动后线程数并不 ...
- Node.js 线程你理解的可能是错的 1
本文代码运行环境系统:MacOS High SierraNode.js:10.3.0 Node.js是单线程的,那么Node.js启动后线程数是1? 答案:Node.js启动后线程数并不是1,以下面代 ...
- HTML中利用JS调用PHP (以登录为例)
最近在做 Login 和 Register 的东西,因为需要用到 session 来存储用户的 id 和 用户名,所以需要调用 php 中的 session.由于不会 Ajax, 所以不得不用一些笨办 ...
最新文章
- 想知道数据表的用户或系统异动时间
- IntelliJ IDEA mac快捷键
- pythonrequests下载大文件_Python3 使用requests模块显示下载大文件显示进度
- 6 redhat 查看rtc时间_RTC 月度小报 9 月 | WebRTC M77、RTC大会即将开幕、实时码流加速...
- mysql Subqueries
- java binaryreader_Java字符流与字节流区别与用法分析
- centos7 服务器安装nginx,mysql,php
- js的隐含参数(arguments,callee,caller)使用方法
- spark 过滤log
- remoting 中事件找不到订阅者时引发异常的解决办法
- windows与linux线程,Linux和Windows两种风格的操作系统,创建线程的方式有何不同?...
- 北漂4年,我选择了回到家乡,我选择了父母在,不远行。
- 【微信小程序】---授权登陆---【巷子】
- tipask二次开发总结_tipask二次开发总结.docx
- 适合php编程的笔记本电脑,【求推荐】(女生用/编程) 的 笔记本(Thinkpad) - 笔记本电脑(Notebook)版 - 北大未名BBS...
- ARM平台处理器简介-ARMv7
- Eclipse安装InUbuntu18和简单使用
- 银行降转账额度 “余额宝”要当心了
- 项目打包打的是什么包_“微端打包+游戏平台”,H5游戏也可一键下载!
- 谷歌PR值停止更新的影响
热门文章
- 大学计算机系学生,大学计算机专业学生自我介绍
- python比较两张图片是否一样_opencv_判断两张图片是否相同
- 计算机知识小技巧,计算机知识---基本操作小技巧.pptx
- yili邮箱服务器配置,手把手教 个人SMTP服务器的配置 -电脑资料
- linux下kegg注释软件,KEGG功能注释工具 KofamKOALA 安装与使用
- 合工大850参考书_合肥工业大学计算机考研850上岸经验分享
- Python3最长连续递增序列问题
- 计算机组成原理唐朔飞课后答案第六章,计算机组成原理第六章部分课后题答案(唐朔飞版)...
- 计算机网络名词解释-csma cda,计算机专业对口升学模拟题1资料.doc
- import _ssl # if we can‘t import it, let the error propagate