文化袁探索专栏——React Native启动流程
文化袁探索专栏——Activity、Window和View三者间关系
文化袁探索专栏——View三大流程#Measure
文化袁探索专栏——View三大流程#Layout
文化袁探索专栏——消息分发机制
文化袁探索专栏——事件分发机制
文化袁探索专栏——Launcher进程启动流程’VS’APP进程启动流程
文化袁探索专栏——Activity启动流程
文化袁探索专栏——自定义View实现细节
文化袁探索专栏——线程安全
文化袁探索专栏——React Native启动流程
ReactNative启动流程|Android如何向RN传递初始参数props
由
$ npx react-native run-android
执行启动RN项目,其应用中只有一个Activity[MainActivity],继承自RN框架的ReactActivity【是RN开发页面的容器】。
进入MainActivity页面执行Activity生命周期onCreate、onPause、onResume、onDestory。而这些生命周期方法都被类ReactActivityDelegate中对应方法所代理。
进入生命周期方法MainActivity
$
onCreate,即执行到ReactActivityDelegate$
onCreate时,调用方法ReactActivityDelegate$
loadApp。之后将loadApp交由ReactDelegate执行,并创建RootView(RN活动页视图),并通过方法startReactApplication启动了整个页面。
在RootView
$
startReactApplication方法中执行mReactInstanceManager.createReactContextInBackground()异步创建活动页上下文ReactContext,然后加载、执行,并将JavaScript映射成Native Widget。直至最后RN页面形成并展示出来 。
/// ReactActivityDelegate.java [Android API 30]
protected void onCreate(Bundle savedInstanceState) {...if (mMainComponentName != null) {loadApp(mainComponentName); // 代理ReactActivity执行到关键方法}}
/// ReactActivityDelegate.java [Android API 30]
protected void loadApp(String appKey) {mReactDelegate.loadApp(appKey); // 将RN启动关键流程交给ReactDelegate.loadAppgetPlainActivity().setContentView(mReactDelegate.getReactRootView());}
/// ReactDelegate.java [Android API 30]
public void loadApp(String appKey) {if (mReactRootView != null) {throw new IllegalStateException("Cannot loadApp while app is already running.");}mReactRootView = createRootView();//创建活动页的视图GroupView(JavaScriptUI的容器)// 执行RN启动流程第二个关键方法startReactApplication。也是正式进入RN启动的方法。mReactRootView.startReactApplication(getReactNativeHost().getReactInstanceManager(), appKey, mLaunchOptions);}
/// RootView.java [Android API 30]
/*** Schedule rendering of the react component rendered by the JS application from the given JS* 调度由JS应用程序从给定JS中呈现react组件*/@ThreadConfined(UI)public void startReactApplication(...mReactInstanceManager = reactInstanceManager;mJSModuleName = moduleName;mAppProperties = initialProperties;mInitialUITemplate = initialUITemplate;// 创建上下文mReactInstanceManager.createReactContextInBackground();...}
Android如何向RN传递初始参数props
需求描述:
从原生Android转入ReactNative的第一个React.Component,在该Component中可以通过this.props获取到原生安卓传递的参数对象。该如何实现?通过startReactApplication重载方法中第三个参数Bundle来实现。在RN中可以获取到由原生传入的该Bundle对象。
// 例如~~
val rnBundle = Bundle()
rnBundle.putCharSequence("device-info","设备信息对象")
rnBundle.putCharSequence("state","用户登录状态")
mReactRootView?.startReactApplication(mReactInstanceManager, "ICRNBridge",rnBundle)
在对应的ReactNative的Coponent中获取,则可通过this.props得到!
文化袁探索专栏——React Native启动流程相关推荐
- 文化袁探索专栏——Activity|Application启动流程
文化袁探索专栏--Activity.Window和View三者间关系 文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--消息分发机 ...
- 文化袁探索专栏——事件分发机制
文化袁探索专栏--Activity.Window和View三者间关系 文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--消息分发机 ...
- 文化袁探索专栏——消息分发机制
文化袁探索专栏--Activity.Window和View三者间关系 文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--消息分发机 ...
- 文化袁探索专栏——线程池执行原理|线程复用|线程回收
文化袁探索专栏--Activity.Window和View三者间关系 文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--消息分发机 ...
- 文化袁探索专栏——Activity、Window和View三者间关系
文化袁探索专栏--Activity.Window和View三者间关系 <文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--H ...
- 文化袁探索专栏——自定义View实现细节
文化袁探索专栏--Activity.Window和View三者间关系 文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--消息分发机 ...
- React Native 启动流程 源码剖析
开始之前 开始分析之前,新建一个名为 RnDemo 的空项目,RN 版本选择 0.58.1,查看项目自动为我们生成 MainActivity.java 和 MainApplication.java ...
- 深入探索linux系统的启动流程
1.启动流程总体介绍 第一. 按下主机电源后,BIOS做硬件检测并根据CMOS中记录,找到启动设备(一般为硬盘). 第二, 接着BIOS 读取硬盘最前面的512个字节分区,也就是读取MBR区域的信息, ...
- nvm导致React Native启动失败
错误如下: The following build commands failed:PhaseScriptExecution [CP-User]\ Generate\ Specs /Users/qia ...
最新文章
- 前锋 php 杭州,前锋php培训
- Jmeter性能测试之while控制器的使用
- spring依赖注入单元测试:expected single matching bean but found 2
- legend3---用Homestead配置后报错“No input file specified.”
- careercup-树与图 4.9
- JVM 优点与缺点的深入分析
- 动态调试android, ddmsida
- 11组软件工程组队项目失物招领系统——进度汇报和下周目标
- lucene 索引优化
- 数据挖掘竞赛-北京PM2.5浓度回归分析训练赛
- 监控 线程 php,Linux平台PHP5.4设置FPM线程数量的方法
- POJ1742 Coins(DP)
- C++ primer第六章6.4函数的学习 之函数的重载
- 注意!Python开发中最容易掉进去的10个坑!你遇到过那些
- 注解@Async解决异步调用问题
- 佳能g2800清废墨_跪求佳能g2800 打印机 清零
- ubuntu+火狐浏览器+印象笔记+剪藏+国内版配置
- con 元器件符号_protel中常用元件电器符号
- 萤石云 android,Android-再次解读萤石云视频
- SAP中计划日历计算规则的理解