本文档提供了 React Native 在 Android 上的技术实现概览,重点关注其核心架构、渲染管线和关键原生组件。它解释了 React Native 组件如何渲染为 Android 视图,以及实现 JavaScript 和原生 Android 代码之间通信的机制。
有关 iOS 特定实现的信息,请参阅iOS 实现。
React Native 在 Android 上包含几个关键的子系统,它们协同工作以将 JavaScript React 组件渲染为原生 Android 视图。该架构有两种不同的模式:传统的 Bridge 架构和较新的 Bridgeless 架构。
来源
React Native 最初采用的 Bridge 架构(现已被视为遗留架构)通过序列化和发送批处理的 JSON 消息在 JavaScript 和原生线程之间进行通信。新的架构引入了“无 Bridge (bridgeless)”模式,通过 JSI (JavaScript Interface) 提供了 JavaScript 和原生代码之间的直接通信。
来源
针对 Android 的 React Native 根据架构的不同,采用两种不同的实例管理方法:
ReactInstanceManager 管理 React 应用程序的生命周期ReactHostImpl (实现 ReactHost 接口)ReactInstanceManager 负责创建和管理 CatalystInstance (其封装了 JavaScript VM),处理生命周期事件,并协调 React Native 与宿主 Android 应用程序之间的交互。
来源
在新架构中,ReactHost 是管理 React Native 实例的主要入口点。它抽象了 React 环境的创建和生命周期管理。
来源
React Native 使用一套核心的原生组件作为 UI 的构建块。这些组件由 Android 视图支持,并使用 Yoga 布局引擎进行布局。
| React Native 组件 | Android 实现 | 基类 | 目的 |
|---|---|---|---|
| 视图 | ReactViewGroup | ViewGroup | 其他组件的基础容器 |
| 文本 | ReactTextView | AppCompatTextView | 文本显示 |
| ScrollView | ReactScrollView | ScrollView | 可滚动容器 |
| 图片 | ReactImageView | GenericDraweeView | 图像显示 |
| TextInput | ReactEditText | EditText | 文本输入字段 |
来源
每个 React Native 组件都有一个对应的“视图管理器”(View Manager),负责创建和更新原生视图。这些管理器将 React 属性映射到原生视图属性。
来源
FabricUIManager 是 React Native UI 管理系统中的核心组件,尤其是在新架构中。它负责协调 UI 更新并管理挂载过程。
来源
挂载过程是 React Native 响应 React 组件树变化而更新 UI 的方式。它涉及以下几个步骤:
来源
ReactViewGroup 是 React Native View 组件的 Android 实现。它是一个专用的 ViewGroup,支持:
来源
React Native 允许视图通过裁剪和分离可视区域外的视图来优化渲染。这由 removeClippedSubviews 属性控制,并在 ReactViewGroup 中实现。
来源
React Native 提供了几个类,用于与 Android 的 Activity 和 Fragment 系统集成:
| 类 | 目的 |
|---|---|
| ReactActivity | React Native 应用程序的基础 Activity |
| ReactActivityDelegate | 处理 Activity 中 React 特有功能的委托 |
| ReactDelegate | 处理 Activities 和 Fragments 的常见 React 集成逻辑 |
| ReactFragment | 用于嵌入 React Native 视图的基础 Fragment |
来源
React Native 与 Android activity 生命周期集成,以正确管理资源和应用程序状态:
| Android 生命周期方法 | React Native 处理方式 |
|---|---|
| onCreate | 初始化 React 委托并加载应用程序 |
| onResume | onHostResume - 激活 JavaScript 执行 |
| onPause | onHostPause - 暂停 JavaScript 执行 |
| onDestroy | onHostDestroy - 清理 React 实例 |
| onBackPressed | 委托给 JS 或默认处理程序 |
| onActivityResult | 转发到 JavaScript 模块 |
| onNewIntent | 转发到 JavaScript 模块 |
来源
ThemedReactContext 是一个特殊的 ReactContext,它封装了基础的 Android 上下文,并提供了对 React Native 功能的访问。它充当 React Native 组件和 Android 视图之间的桥梁。
此上下文对于以下方面至关重要:
来源
React Native Android 中的文本渲染通过一个专门的系统处理,该系统将 React Native 文本属性转换为具有适当样式的 Android Spannable 对象。
TextLayoutManager 负责:
来源
React Native 通过 ReactScrollView (垂直滚动)和 ReactHorizontalScrollView (水平滚动)提供可滚动容器。这些组件分别扩展了 Android 的 ScrollView 和 HorizontalScrollView。
React Native 滚动视图的主要功能包括:
来源
React Native 包含多项针对 Android 性能的优化:
与 Android 的 RecyclerView 类似,React Native 可以重用视图以减少内存消耗并提高性能。
来源
通过从视图层次结构中移除可视区域之外的视图,React Native 可以提高渲染性能。
来源
React Native 的 Android 实现提供了一个强大的框架,用于将 React 组件渲染为原生 Android 视图。它弥合了 JavaScript 和原生 Android 代码之间的鸿沟,允许开发者编写跨平台应用程序,同时利用原生性能和功能。
该架构由几个关键组件组成
ReactInstanceManager 或 ReactHost 管理 React Native 实例了解此架构对于在 Android 上开发、调试和优化 React Native 应用程序至关重要。