2017-05-30 10 views
5

Crashlyticsからのユーザーのかなりの部分(約10%)にエラーレポートが表示されます。これはCalledFromWrongThreadExceptionです。Unity Daydream 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、ファブリック...)から来ることができると思い、ここで参考になっていません。

誰も同じ問題がありますか?

参照のために、ユニティバージョン5.6.0f3を使用しています。このバグは、PixelおよびPixel XL電話機でのみ報告されています。

答えて

0

私はあなたのプロジェクトに関するすべての詳細を持っておらず、社内で再現できないエラーは最悪のものです。それにもかかわらず、私は何が起こっているかについていくつかのヒントを出そうとします。おそらく、これらのヒントをいくつかの光を当てると、エラーの根本的な原因を把握することができます:アンドロイドで

CalledFromWrongThreadException

を見るだけで、それを作成したスレッドからアクセスすることができます。これは他の環境でも同様です(WinFormsWPFなど)。この例外は、何かが間違ったスレッドからいくつかのUI要素(SurfaceView)にアクセスしようとしていることを意味します。

com.unity3d.player.UnityPlayer $ c.run

スタックトレースは、いくつかのカスタムユニティ配管コードに由来します。これは、この呼び出しが(あなたの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に自由に感じる)幸せだろう。

関連する問題