You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter集成flutter_sentry后启动报错,求解决方案

Flutter配置sentry_flutter后启动报错:Reply already submitted及Invalid app start data

错误日志

W/Sentry  ( 7120): Invalid app start data: app not launched in foreground or app start took too long (>60s)
E/MethodChannel#sentry_flutter( 7120): Failed to handle method call
E/MethodChannel#sentry_flutter( 7120): java.lang.IllegalStateException: Reply already submitted
E/MethodChannel#sentry_flutter( 7120):  at io.flutter.embedding.engine.dart.DartMessenger$Reply.reply(DartMessenger.java:431)
E/MethodChannel#sentry_flutter( 7120):  at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.success(MethodChannel.java:272)
E/MethodChannel#sentry_flutter( 7120):  at io.sentry.flutter.SentryFlutterPlugin.fetchNativeAppStart(SentryFlutterPlugin.kt:229)
E/MethodChannel#sentry_flutter( 7120):  at io.sentry.flutter.SentryFlutterPlugin.onMethodCall(SentryFlutterPlugin.kt:74)
E/MethodChannel#sentry_flutter( 7120):  at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:267)
E/MethodChannel#sentry_flutter( 7120):  at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:292)
E/MethodChannel#sentry_flutter( 7120):  at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:319)
E/MethodChannel#sentry_flutter( 7120):  at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(Unknown Source:12)
E/MethodChannel#sentry_flutter( 7120):  at android.os.Handler.handleCallback(Handler.java:942)
E/MethodChannel#sentry_flutter( 7120):  at android.os.Handler.dispatchMessage(Handler.java:99)
E/MethodChannel#sentry_flutter( 7120):  at android.os.Looper.loopOnce(Looper.java:201)
E/MethodChannel#sentry_flutter( 7120):  at android.os.Looper.loop(Looper.java:288)
E/MethodChannel#sentry_flutter( 7120):  at android.app.ActivityThread.main(ActivityThread.java:7924)
E/MethodChannel#sentry_flutter( 7120):  at java.lang.reflect.Method.invoke(Native Method)
E/MethodChannel#sentry_flutter( 7120):  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
E/MethodChannel#sentry_flutter( 7120):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)


E/DartMessenger( 7120): Uncaught exception in binary message listener
E/DartMessenger( 7120): java.lang.IllegalStateException: Reply already submitted
E/DartMessenger( 7120):     at io.flutter.embedding.engine.dart.DartMessenger$Reply.reply(DartMessenger.java:431)
E/DartMessenger( 7120):     at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:287)
E/DartMessenger( 7120):     at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:292)
E/DartMessenger( 7120):     at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:319)
E/DartMessenger( 7120):     at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(Unknown Source:12)
E/DartMessenger( 7120):     at android.os.Handler.handleCallback(Handler.java:942)
E/DartMessenger( 7120):     at android.os.Handler.dispatchMessage(Handler.java:99)
E/DartMessenger( 7120):     at android.os.Looper.loopOnce(Looper.java:201)
E/DartMessenger( 7120):     at android.os.Looper.loop(Looper.java:288)
E/DartMessenger( 7120):     at android.app.ActivityThread.main(ActivityThread.java:7924)
E/DartMessenger( 7120):     at java.lang.reflect.Method.invoke(Native Method)
E/DartMessenger( 7120):     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
E/DartMessenger( 7120):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)
D/EGL_emulation( 7120): app_time_stats: avg=1.61ms min=0.59ms max=21.30ms count=32

当前配置代码

Future<void> main() async {
  await SentryFlutter.init(
    (options) {
      options.dsn =
          '<sentry_dns>';
      // Set tracesSampleRate to 1.0 to capture 100% of transactions for tracing.
      // We recommend adjusting this value in production.
      options.tracesSampleRate = 1.0;
      // The sampling rate for profiling is relative to tracesSampleRate
      // Setting to 1.0 will profile 100% of sampled transactions:
      options.profilesSampleRate = 1.0;
    },
    appRunner: () =>
        runApp(MultiProvider(providers: localProviders, child: const MyApp())),
  );
}

解决办法

1. 禁用自动App Start追踪(最快解决)

这个报错核心是Sentry的自动App Start追踪逻辑在调试环境(比如模拟器启动慢)下触发了MethodChannel重复回复的问题。直接在配置里关闭该功能即可:

修改后的配置代码:

Future<void> main() async {
  await SentryFlutter.init(
    (options) {
      options.dsn = '<sentry_dns>';
      options.tracesSampleRate = 1.0;
      options.profilesSampleRate = 1.0;
      // 关闭自动App Start追踪,绕过报错逻辑
      options.enableAutoAppStartTracking = false;
    },
    appRunner: () => runApp(MultiProvider(providers: localProviders, child: const MyApp())),
  );
}

2. 升级sentry_flutter到最新稳定版

这个Reply already submitted的异常大概率是旧版本的已知bug,Sentry官方后续版本已经修复。执行以下命令升级:

flutter pub upgrade sentry_flutter

3. 优化应用启动速度

日志里的Invalid app start data: app start took too long (>60s)警告,说明你的应用启动耗时超过了Sentry的阈值。可以:

  • 把非必要的初始化操作(比如某些第三方SDK初始化)移到应用启动后再执行
  • 用真机测试,模拟器的启动速度通常比真机慢很多
  • 检查localProviders里是否有耗时的同步/异步操作,尽量延迟加载

内容的提问来源于stack exchange,提问作者Salvatore Calla'

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 10:43:11