gpt4 book ai didi

flutter - Flutter 中的 Firebase 后台消息处理程序产生重复的隔离并运行应用程序两次

转载 作者:行者123 更新时间:2023-12-05 05:31:07 24 4
gpt4 key购买 nike

我的 pubspec.yaml 中有以下包

firebase_core: ^2.2.0 
firebase_messaging: ^14.1.0

在我的 main.dart

@pragma('vm:entry-point')
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {

}

void main() {
WidgetsFlutterBinding.ensureInitialized();
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);

runApp(const MyApp());
}

这导致我的主要方法在 2 个隔离中运行两次。如果我删除 FirebaseMessaging.onBackgroundMessage(...) 行,它会运行一个隔离。

当我在 runApp(...) 处设置断点时,我在 vscode 调用堆栈窗口中看到了这一点,因为它被击中了两次。

没有 onBackgroundMessage

single isolate running main method

使用 onBackgroundMessage

two isolates running main method

因此,firebase onMessage 和其他处理程序会为每个通知触发两次并重复工作,并且由于它们处于不同的隔离状态,因此很难检查和避免它。 (上面的例子没有这部分)

我看到 MyApp 的构建方法也运行了两次,这是我不想要的。这可能会产生我想避免的内存和计算成本。

我想知道这是否正常?如果是这样,有没有办法避免这种情况?即有没有办法检测重复的 isolate 和 main 方法可以返回?

如果这不是正常行为,我做错了什么?


为了完整性,flutter --version 的输出

Flutter 3.3.6 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 6928314d50 (3 weeks ago) • 2022-10-25 16:34:41 -0400
Engine • revision 3ad69d7be3
Tools • Dart 2.18.2 • DevTools 2.15.0

最佳答案

更新:

低于最新版本现在可以按预期工作。

  firebase_core: 2.3.0
firebase_remote_config: 3.0.6
firebase_analytics: 10.0.6
firebase_crashlytics: 3.0.6
firebase_messaging: 14.1.1

Firebase 团队有 reverted some changes并将其应用于 future version .


如果您只使用消息传递,请使用以下版本

  firebase_core: ^1.24.0
firebase_messaging: ^13.1.0

如果您正在使用其他 firebase 服务,这些是我设法在不使用依赖项覆盖的情况下协同工作的版本。

  # when you update firebase versions again because its
# "good practice" and it ended up in subtle bugs, loss
# of self-confidence, sleep deprevation and an overall
# degredation in quality of life, increase the counter
# here as a warning for the time after that you feel
# like doing it again.
#
# time spent resolving issues caused by updating
# firebase version upgrades that wasn't needed: 43h
# versions last updated on: 15 nov 2022
firebase_core: 1.24.0
firebase_remote_config: 2.0.20
firebase_analytics: 9.3.8
firebase_crashlytics: 2.9.0
firebase_messaging: 13.1.0

目前,您可以采用最新版本的所有内容并接受该错误,或​​者将您的 firebase 软件包锁定为以上版本,然后等待一个愉快的周末空闲时间尝试更新到最新版本,看看有什么问题。

它最终可能会得到修复,并且可能会以错误修复版本的形式交付给所有包。

this question and answers得到指点

issue on github很可能与这个相同。

关于flutter - Flutter 中的 Firebase 后台消息处理程序产生重复的隔离并运行应用程序两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74430484/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com