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).