以下是关于 React Native 和 Flutter 原生模块开发的基本知识点总结:
一、核心概念对比
| 维度 | React Native | Flutter |
|---|---|---|
| 架构基础 | JavaScriptCore/Hermes + Bridge/TurboModules | Dart VM + Skia引擎 |
| 原生交互方式 | Native Modules + Native UI Components | Platform Channels + Platform Views |
| 线程模型 | JS线程与原生线程分离 | Dart单线程 + Isolate机制 |
| 热重载支持 | 支持 | 支持(更稳定) |
| 性能关键路径 | Bridge通信开销(TurboModules优化) | AOT编译 + 高性能渲染 |
二、React Native 原生模块开发
1. 基础模块架构
2. Android 原生模块开发
// MyModule.java
public class MyModule extends ReactContextBaseJavaModule {
public MyModule(ReactApplicationContext context) {
super(context);
}
@Override
public String getName() {
return "MyModule"; }
@ReactMethod
public void showToast(String message) {
Toast.makeText(getReactApplicationContext(), message, Toast.LENGTH_LONG).show();
}
}
// MyPackage.java
public class MyPackage implements ReactPackage {
@Override
public List<NativeModule> createNativeModules(ReactApplicationContext context) {
return Arrays.<NativeModule>asList(new MyModule(context));
}
}
3. iOS 原生模块开发
// MyModule.swift
@objc(MyModule)
class MyModule: NSObject {
@objc static func requiresMainQueueSetup() -> Bool {
return true }
@objc func showToast(_ message: String) {
DispatchQueue.main.async {
let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert)
UIApplication.shared.keyWindow?.rootViewController?.present(alert, animated: true)
}
}
}
4. JS端调用
import {
NativeModules } from 'react-native';
NativeModules.MyModule.showToast('Hello Native!');
三、Flutter 原生模块开发
1. Platform Channel 架构
2. Android 平台实现
// MainActivity.kt
class MainActivity : FlutterActivity() {
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "my_channel").setMethodCallHandler {
call, result ->
when (call.method) {
"showToast" -> {
Toast.makeText(this, call.arguments.toString(), Toast.LENGTH_LONG).show()
result.success(null)
}
else -> result.notImplemented()
}
}
}
}
3. iOS 平台实现
// AppDelegate.swift
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let controller = window?.rootViewController as! FlutterViewController
let channel = FlutterMethodChannel(name: "my_channel", binaryMessenger: controller.binaryMessenger)
channel.setMethodCallHandler {
call, result in
if call.method == "showToast" {
let alert = UIAlertController(title: nil, message: call.arguments as? String, preferredStyle: .alert)
controller.present(alert, animated: true)
result(nil)
} else {
result(FlutterMethodNotImplemented)
}
}
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
}
4. Dart端调用
import 'package:flutter/services.dart';
final _channel = MethodChannel('my_channel');
Future<void> showToast(String message) async {
try {
await _channel.invokeMethod('showToast', message);
} on PlatformException catch (e) {
print("Native调用失败: ${e.message}");
}
}
四、高级开发技巧
1. 性能优化策略
| 技术方向 | React Native | Flutter |
|---|---|---|
| 线程通信优化 | 使用TurboModules替代旧版Bridge | 使用Isolate处理CPU密集型任务 |
| 数据序列化 | 使用更高效的序列化格式(如FlatBuffers) | 优化MethodChannel传输数据大小 |
| 内存管理 | 避免JS与原生层循环引用 | 及时释放Platform Channel回调引用 |
| 渲染优化 | 原生UI组件直接渲染 | 使用CustomPainter优化复杂绘制 |
2. 混合视图集成
React Native:
// iOS原生视图封装
class CustomView: UIView {
// 实现RCTComponent协议
}
// JS端使用
<NativeCustomView style={
styles.custom} />
Flutter:
// PlatformView集成Android View
Widget build(BuildContext context) {
return AndroidView(
viewType: 'plugins.example/native_view',
creationParams: {
'text': 'Hello'},
creationParamsCodec: StandardMessageCodec(),
);
}
3. 异步通信模式
React Native Promise示例:
@ReactMethod
public void asyncTask(Promise promise) {
new Thread(() -> {
try {
String result = doHeavyWork();
promise.resolve(result);
} catch (Exception e) {
promise.reject("ERROR", e);
}
}).start();
}
Flutter Completer示例:
Future<String> fetchData() async {
final completer = Completer<String>();
_channel.invokeMethod('fetch').then((result) {
completer.complete(result);
}).catchError((error) {
completer.completeError(error);
});
return completer.future;
}
五、企业级应用方案
1. 架构设计模式
| 模式 | React Native | Flutter |
|---|---|---|
| 分层架构 | 业务逻辑/UI/原生层严格分离 | BLoC/Cubit状态管理 + 分层设计 |
| 模块化开发 | Metro拆包 + 动态加载 | 使用Dart的Package/Plugin机制 |
| 混合导航 | React Navigation + 原生导航控制器 | Flutter Navigator + 原生路由集成 |
| 安全通信 | 使用JSI加密通信通道 | 基于Protobuf的二进制协议 |
2. 质量保障体系
| 维度 | 方案 | 工具链 |
|---|---|---|
| 单元测试 | Jest/Detox(RN) / Flutter Test | GitHub Actions CI集成 |
| E2E测试 | Appium/Cypress(RN) / IntegrationTest | BrowserStack云测试平台 |
| 性能监控 | Flipper/Reactotron(RN) | Dart DevTools/Flutter Performance |
| 崩溃报告 | Sentry/Crashlytics集成 | Firebase Crashlytics原生集成 |
六、调试与优化
1. 调试工具链
| 工具 | React Native | Flutter |
|---|---|---|
| 开发工具 | Flipper / React DevTools | Dart DevTools / Flutter Inspector |
| 网络调试 | Chrome Network面板 + 代理工具 | Charles + Dart DevTools Network |
| 性能剖析 | Hermes Profiler / Systrace | Observatory / Dart DevTools Timeline |
| 内存分析 | Android Profiler / Xcode Instruments | Dart DevTools Memory面板 |
2. 常见问题解决
| 问题类型 | React Native解决方案 | Flutter解决方案 |
|---|---|---|
| 线程死锁 | 使用NativeModules线程队列管理 | 确保Platform Channel在主线程调用 |
| 内存泄漏 | WeakReference包装回调引用 | 及时注销Channel Handler + Stream关闭 |
| 原生视图尺寸异常 | 实现onSizeChanged回调 | 使用LayoutBuilder约束布局 |
| 热重载失效 | 清理metro缓存(npm start – –reset-cache) | 执行flutter clean + 重启daemon |
七、前沿技术演进
| 技术方向 | React Native | Flutter |
|---|---|---|
| 新架构 | Fabric渲染器 + TurboModules | Impeller渲染引擎(iOS) |
| 跨平台演进 | Windows/macOS支持 | Web/桌面端增强支持 |
| 性能突破 | JSI直通内存 + 预绑定 | 更高效的GC策略 + AOT优化 |
| 开发者体验 | 新调试工具链 + 类型安全增强 | 热重载稳定性提升 + 多窗口开发支持 |
八、学习路径建议
© 版权声明
文章版权归作者所有,未经允许请勿转载。如内容涉嫌侵权,请在本页底部进入<联系我们>进行举报投诉!
THE END











![[干货] 微信定时发布工具推荐 - 宋马](https://p3-sign.toutiaoimg.com/8699/4299707035~tplv-tt-origin-web:gif.jpeg?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1752965094&x-signature=0LzG69qv5rqMfQ9PWL4B%2F8o94Xo%3D)








暂无评论内容