文化袁探索专栏——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启动流程相关推荐

  1. 文化袁探索专栏——Activity|Application启动流程

    文化袁探索专栏--Activity.Window和View三者间关系 文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--消息分发机 ...

  2. 文化袁探索专栏——事件分发机制

    文化袁探索专栏--Activity.Window和View三者间关系 文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--消息分发机 ...

  3. 文化袁探索专栏——消息分发机制

    文化袁探索专栏--Activity.Window和View三者间关系 文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--消息分发机 ...

  4. 文化袁探索专栏——线程池执行原理|线程复用|线程回收

    文化袁探索专栏--Activity.Window和View三者间关系 文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--消息分发机 ...

  5. 文化袁探索专栏——Activity、Window和View三者间关系

    文化袁探索专栏--Activity.Window和View三者间关系 <文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--H ...

  6. 文化袁探索专栏——自定义View实现细节

    文化袁探索专栏--Activity.Window和View三者间关系 文化袁探索专栏--View三大流程#Measure 文化袁探索专栏--View三大流程#Layout 文化袁探索专栏--消息分发机 ...

  7. React Native 启动流程 源码剖析

    开始之前   开始分析之前,新建一个名为 RnDemo 的空项目,RN 版本选择 0.58.1,查看项目自动为我们生成 MainActivity.java 和 MainApplication.java ...

  8. 深入探索linux系统的启动流程

    1.启动流程总体介绍 第一. 按下主机电源后,BIOS做硬件检测并根据CMOS中记录,找到启动设备(一般为硬盘). 第二, 接着BIOS 读取硬盘最前面的512个字节分区,也就是读取MBR区域的信息, ...

  9. nvm导致React Native启动失败

    错误如下: The following build commands failed:PhaseScriptExecution [CP-User]\ Generate\ Specs /Users/qia ...

最新文章

  1. 前锋 php 杭州,前锋php培训
  2. Jmeter性能测试之while控制器的使用
  3. spring依赖注入单元测试:expected single matching bean but found 2
  4. legend3---用Homestead配置后报错“No input file specified.”
  5. careercup-树与图 4.9
  6. JVM 优点与缺点的深入分析
  7. 动态调试android, ddmsida
  8. 11组软件工程组队项目失物招领系统——进度汇报和下周目标
  9. lucene 索引优化
  10. 数据挖掘竞赛-北京PM2.5浓度回归分析训练赛
  11. 监控 线程 php,Linux平台PHP5.4设置FPM线程数量的方法
  12. POJ1742 Coins(DP)
  13. C++ primer第六章6.4函数的学习 之函数的重载
  14. 注意!Python开发中最容易掉进去的10个坑!你遇到过那些
  15. 注解@Async解决异步调用问题
  16. 佳能g2800清废墨_跪求佳能g2800 打印机 清零
  17. ubuntu+火狐浏览器+印象笔记+剪藏+国内版配置
  18. con 元器件符号_protel中常用元件电器符号
  19. 萤石云 android,Android-再次解读萤石云视频
  20. SAP中计划日历计算规则的理解

热门文章

  1. 【计算机二级】综合题目
  2. CIE1931-XYZ转CCT和Duv
  3. 贺泓胜:2.24黄金今日走势分析操作建议,黄金原油解套指导
  4. 惠普服务器u盘做win7系统,惠普星14-CE U盘装系统win7教程
  5. Python函数式编程(fn)
  6. 关于将Java编译过的.class文件打成jar可执行文件/JAR详解
  7. Tableau文件管理
  8. SAP 采购合同案例教程后台配置
  9. 快手网址 - KuaiShou.NET
  10. 传感器原理与检测技术复习笔记第六章-压电式传感器