gpt4 book ai didi

unity3d - unity Daydream CalledFromWrongThreadException

转载 作者:行者123 更新时间:2023-12-03 15:26:11 27 4
gpt4 key购买 nike

我们从 Crashlytics 收到错误报告,影响了相当一部分用户(大约 10%)。这是一个 CalledFromWrongThreadException。

问题是我不知道是什么导致了这个问题,我自己也没有。这是日志:

Caused by android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.
at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:7282)
at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:1197)
at android.view.ViewGroup.invalidateChild(ViewGroup.java:5748)
at android.view.View.invalidateInternal(View.java:15082)
at android.view.View.invalidate(View.java:15046)
at android.view.View.invalidate(View.java:15029)
at android.view.SurfaceView$1.handleMessage(SurfaceView.java:142)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at com.unity3d.player.UnityPlayer$c.run(Unknown Source:20)
com.unity3d.player.UnityPlayer$c.run(Unknown Source:20)在这里并不是很有帮助,因为来源未知,我想它可能来自第三方库(GVR SDK、Fabric ...)。

有没有人有同样的问题?

作为引用,我们使用的是 Unity 版本:5.6.0f3,该错误仅针对 Pixel 和 Pixel XL 手机报告。

最佳答案

我没有关于你项目的所有细节,内部无法重现的错误是最糟糕的。尽管如此,我还是会尝试给出一些关于正在发生的事情的提示。也许这些提示可以说明一些问题并帮助您找出错误的根本原因:

CalledFromWrongThreadException

在 Android 上, View 只能从创建它的线程访问。这实际上也适用于其他环境( WinFormsWPF 等)。此异常意味着某些东西正试图从错误的线程访问某些 UI 元素 (SurfaceView)。

com.unity3d.player.UnityPlayer$c.run

堆栈跟踪源自一些自定义 Unity 管道代码。虽然这并没有给出这个调用来自哪里(在你的 C# 代码中)的线索,但它可能意味着代码来自 C#(使用 AndroidJavaObject 或 AndroidJavaClass 调用)。 Unity 的脚本线程与 Android 的主线程不同,因此这与您获得的异常类型一起使用是有意义的。

作为测试,我使用此代码来模拟相同的异常:

using (var actClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) 
{
var activity = actClass.GetStatic<AndroidJavaObject>("currentActivity");

// cause an exception to be thrown
activity.Call("setContentView", 15);
}

这导致了以下异常,它与您得到的异常非常相似(至少在其根)。

E/ViewRootImpl(19244): com.test.crash.GameActivity : Only the original thread that created a view hierarchy can touch its views. E/ViewRootImpl(19244): java.lang.RuntimeException E/ViewRootImpl(19244): at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:7105) E/ViewRootImpl(19244): at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:1139) E/ViewRootImpl(19244): at android.view.ViewGroup.invalidateChild(ViewGroup.java:5254) E/ViewRootImpl(19244): at android.view.View.invalidateInternal(View.java:13669) E/ViewRootImpl(19244): at android.view.View.invalidate(View.java:13633) E/ViewRootImpl(19244): at android.view.View.onFocusChanged(View.java:6204) E/ViewRootImpl(19244): at android.view.View.clearFocusInternal(View.java:6089) E/ViewRootImpl(19244): at android.view.View.unFocus(View.java:6122) E/ViewRootImpl(19244): at android.view.ViewGroup.unFocus(ViewGroup.java:997) E/ViewRootImpl(19244): at android.view.ViewGroup.removeAllViewsInLayout(ViewGroup.java:4946) E/ViewRootImpl(19244): at android.view.ViewGroup.removeAllViews(ViewGroup.java:4905) E/ViewRootImpl(19244): at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:410) E/ViewRootImpl(19244): at android.app.Activity.setContentView(Activity.java:2423) E/ViewRootImpl(19244): at com.unity3d.player.UnityPlayer.nativeRender(Native Method) E/ViewRootImpl(19244): at com.unity3d.player.UnityPlayer.a(Unknown Source) E/ViewRootImpl(19244): at com.unity3d.player.UnityPlayer$c$1.handleMessage(Unknown Source) E/ViewRootImpl(19244): at android.os.Handler.dispatchMessage(Handler.java:98) E/ViewRootImpl(19244): at android.os.Looper.loop(Looper.java:173) E/ViewRootImpl(19244): at com.unity3d.player.UnityPlayer$c.run(Unknown Source)



摘要

正如我之前提到的,这只会给你一个方向。希望您能够找到可能导致此问题的潜在位置(可能是插件代码)。我很乐意提供进一步的帮助(在评论中,或随时联系 contact me)。

关于unity3d - unity Daydream CalledFromWrongThreadException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44260967/

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