2017-05-30 30 views
5

Kullanıcılarımızın büyük bir bölümünü etkileyen (yaklaşık% 10'u) Crashlytics'ten hata raporları alıyoruz. Bir CalledFromWrongThreadException var.Unity Daydream ÇağrısıFromWrongThreadException

Sorun, sorunun nedenini bilmiyorum ve buna kendim sahip değilim. İşte günlük geçerli:

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) gerçekten kökeni bilinmemektedir, ben bir üçüncü taraf kitaplığından (GVR SDK Kumaş ...) gelebilir tahmin burada değil yararlı olduğu.

Aynı sorunu olan var mı?

Referans için Birlik sürümünü kullanıyoruz: 5.6.0f3 ve hata yalnızca Pixel ve Pixel XL telefonları için bildirilmiştir.

cevap

0

Projenizle ilgili tüm ayrıntılara sahip değilim ve kurum içinde yeniden üretilemeyen hatalar en kötüsüdür. Yine de, neler olduğuna dair birkaç ipucu vermeye çalışacağım. Belki bu ipuçları biraz ışık tutmak ve hata kök nedenini anlamaya yardımcı olabilir:

CalledFromWrongThreadException Android'te

, bir Görünüm ancak onu yaratan parçacığı ulaşılabilir. Bu aslında diğer ortamlar için de geçerlidir (WinForms, WPF, vb.). Bu istisna, bir şeyin yanlış iplikten bazı UI öğesine (SurfaceView) erişmeye çalıştığı anlamına gelir.

com.unity3d.player.UnityPlayer $ c.run

yığın izleme bazı özel birlik tesisat kodundan kaynaklanır. Bu çağrının nereden geldiği hakkında bir ipucu vermezken (C# kodunuzda) bu kodun C# 'dan geldiği anlamına gelebilir (AndroidJavaObject veya AndroidJavaClass çağrılarını kullanarak). Unity'nin betikleme iş parçacığı, Android'in ana iş parçacığı ile aynı değildir ve bu, aldığınız istisna türü ile birlikte mantıklıdır. Bir test

i aynı durum simüle etmek bu kodu kullandım:

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); 
} 

Bu en azından (alıyoruz birine çok benzer şu istisna ile sonuçlandı onun kök).

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)

Özeti

ı önce de belirtildiği gibi

, bu sadece nereye bakacağını sana bir yön verir. Umarım bunun sebebi olabilecek olası yerleri (muhtemelen eklenti kodu) bulabileceksiniz. Daha fazla yardımcı olmaktan memnuniyet duyarız (yorumlarda veya contact me'dan çekinmeyin).