使用awesome_notifications提示FlutterJNI已脱离原生C++无法发送消息如何解决
错误原因
Tried to send a platform message to Flutter, but FlutterJNI was detached from native C++ 错误本质是调用
awesome_notifications相关方法时,Flutter引擎与原生Android层的绑定已经被销毁,无法完成跨层通信,常见触发场景为初始化时机错误、后台isolate调用、App进程处于回收状态等。
解决方案
- 修正初始化时机
必须在main()函数中runApp()执行前、WidgetsFlutterBinding.ensureInitialized()之后完成插件初始化,确保初始化时Flutter引擎已经完成和原生层的绑定。
正确初始化代码如下:
void main() async { WidgetsFlutterBinding.ensureInitialized(); // 初始化awesome_notifications await AwesomeNotifications().initialize('resource://drawable/ic_stat_logo', [ NotificationChannel( channelKey: "key1", channelName: "proton coders point", channelDescription: "notification example", enableLights: true, enableVibration: true, importance: NotificationImportance.High, ) ]); runApp(const MyApp()); }
- 调整通知发送的isolate
不要在后台isolate(如WorkManager回调、后台定位回调、原生侧唤起的独立isolate)中直接调用createNotification,这类isolate没有和主Flutter引擎绑定,会触发JNI解绑错误。如果需要在后台逻辑中发送通知,先通过isolate通信将请求传递到主isolate后再执行发送操作。 - 检查Android端配置与权限
- 确保AndroidManifest.xml中已经声明了通知相关权限,Android 13及以上版本需要在发送通知前动态请求
POST_NOTIFICATIONS权限 - 避免在App被用户划退、进程被系统回收的场景下调用通知发送逻辑
- 确保AndroidManifest.xml中已经声明了通知相关权限,Android 13及以上版本需要在发送通知前动态请求
- 清理缓存匹配版本
- 检查
awesome_notifications插件版本与当前Flutter版本兼容:3.x版本的插件需要Flutter 3.0及以上版本支持 - 执行
flutter clean清理构建缓存,再重新编译运行项目,排除缓存导致的绑定异常
- 检查
内容的提问来源于stack exchange,提问作者Naqeeb maqsood
相关产品推荐
相关产品推荐

