Flutter后台定位报错:FlutterJNI与原生C++断开无法发送消息
禁止在App终止状态下向Flutter发送平台消息
设备终止时,Flutter引擎已被销毁,JNI连接完全断开,此时原生端调用Flutter平台通道必然触发该错误。Android端可通过FlutterJNI.isAttached()判断引擎是否活跃,iOS端检查FlutterEngine的存活状态,仅在引擎正常运行时发送消息。采用原生层存储+前台同步的方案
终止状态下获取的位置数据,直接在原生端存入本地存储(Android用Room/SharedPreferences,iOS用Core Data/NSUserDefaults)。等App重启或回到前台后,再通过平台通道将存储的位置数据同步到Flutter层统一处理。用独立后台服务处理位置追踪
Android端启动前台服务(Foreground Service)负责持续获取位置,服务与Flutter引擎解耦,直接在服务内完成数据上传或存储;iOS端开启Background Location Updates权限,在后台模式下获取位置后,原生层自行处理数据,不触发Flutter通道通信。修正生命周期回调逻辑
在App进入终止状态前,原生端必须停止位置监听和消息发送。Android在onDestroy回调中取消位置更新、清理通道回调;iOS在applicationWillTerminate中终止位置获取任务,避免后续无效的Flutter消息发送。定位错误触发的具体时机
原生端添加日志,打印App状态(Android的isDestroyed()、iOS的UIApplication.shared.applicationState)和消息发送的时间点,确认错误是否确实发生在App终止后的位置回调中,精准定位问题场景。
内容的提问来源于stack exchange,提问作者Sujata Agarwal

