gpt4 book ai didi

android - Unity Firebase SetCurrentScreen 必须从主线程调用

转载 作者:行者123 更新时间:2023-11-29 16:57:57 26 4
gpt4 key购买 nike

这很奇怪,我曾经为我的 Unity 项目做 GoogleAnalytics,因为我有两个主要用途,一是查看屏幕上的用户数量,二是查看某些事件。我听说过 Firebase 并想探索它,我成功地初始化了 sdk 并记录了不同的事件,但现在有一个我似乎无法克服的主要问题。显然,当我尝试使用以下方式记录当前屏幕时:

Firebase.Analytics.FirebaseAnalytics.SetCurrentScreen ("MainActivity", "MainMenu");

然后在某处阅读以像这样使用它:

FirebaseAnalytics.SetCurrentScreen ("MainActivity", "MainMenu");

在 Monitor(ddms) 中查看时,这两个函数都给出了相同的错误

SetCurrentScreen must be called from Main Thread

每次我调用这个函数时,我都不知道为什么会这样,也找不到任何解决方案。

调用方法的函数是:

public void AnalyticsLogScreen() {
// Log an event with a float.
DebugLog("Logging a Screen");
Firebase.Analytics.FirebaseAnalytics.SetCurrentScreen ("MainActivity", "MainMenu");

}

最佳答案

看来您正在调用 SetCurrentScreen从工作线程。您可以通过查看进行调用的线程的名称或将来自 logcat 的 TID 与进程 PID 进行比较来检查这一点。主线程的名称为“main”,TID 与应用程序 PID 匹配。

Unity SetCurrentScreen 包装在 Java FirebaseAnalytics.setCurrentScreen() 方法上。 setCurrentScreen只能从主线程调用。

此要求的原因是 Android 中的 Activity 只能从 UI 线程显示,并且允许来自工作线程的 SetCurrentScreen 在 UI 线程中显示的 Activity 和执行调用 setCurrentScreen 的工作线程之间创建竞争条件。为避免这种竞争情况,Firebase 要求在 UI 线程上调用 setCurrentScreen。如果您仍然喜欢从工作线程设置屏幕,您可以调用 runOnUiThread虽然这会产生竞争条件,因此某些事件可能会归因于错误的屏幕或显示为未记录在任何屏幕上。

关于android - Unity Firebase SetCurrentScreen 必须从主线程调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44135700/

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