2017-05-30 25 views
5

हमें क्रैशलिटिक्स से त्रुटि रिपोर्ट मिलती है जो हमारे उपयोगकर्ताओं के एक बड़े हिस्से को प्रभावित करती है (उनमें से लगभग 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 एसडीके, कपड़ा ...) से आ सकता है।

क्या किसी के पास एक ही समस्या है?

संदर्भ के लिए हम एकता संस्करण का उपयोग कर रहे हैं: 5.6.0f3 और बग केवल पिक्सेल और पिक्सेल एक्सएल फोन के लिए रिपोर्ट किया गया है।

उत्तर

0

मेरे पास आपके प्रोजेक्ट के बारे में सभी विवरण नहीं हैं, और त्रुटियों को घर में पुन: उत्पन्न नहीं किया जा सकता है। फिर भी, मैं कुछ संकेत देने की कोशिश करूंगा कि क्या हो रहा है। शायद ये संकेत कुछ प्रकाश डाला और आप त्रुटि का मूल कारण यह पता लगाने में मदद कर सकते हैं:

CalledFromWrongThreadException

एंड्रॉयड पर, एक दृश्य केवल धागा है कि यह बनाया से पहुँचा जा सकता। यह वास्तव में अन्य वातावरण के लिए भी सच है (WinForms, WPF, आदि)। इस अपवाद का अर्थ है कि कुछ गलत थ्रेड से कुछ UI तत्व (SurfaceView) तक पहुंचने का प्रयास कर रहा है।

com.unity3d.player.UnityPlayer $ c.run

स्टैक ट्रेस कुछ कस्टम एकता पाइपलाइन कोड से निकलती है। हालांकि यह कोई सुराग नहीं देता है जहां यह कॉल आता है (आपके सी # कोड में), इसका मतलब यह हो सकता है कि कोड सी # से आया है (AndroidJavaObject या AndroidJavaClass कॉल का उपयोग करके)। एकता का स्क्रिप्टिंग थ्रेड एंड्रॉइड के मुख्य धागे जैसा नहीं है, और इसलिए यह आपके द्वारा प्राप्त अपवाद प्रकार के साथ मिलकर समझ में आता है।

एक परीक्षण के रूप में, मैं इस कोड का उपयोग किया है एक ही अपवाद अनुकरण करने के लिए:

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 पर निःशुल्क महसूस करें)।

संबंधित मुद्दे