2017-05-30 14 views
5

Chúng tôi nhận được báo cáo lỗi từ Crashlytics ảnh hưởng đến một phần đáng kể người dùng của chúng tôi (khoảng 10% trong số họ). Đó là một CalledFromWrongThreadException.Unity Daydream CalledFromWrongThreadException

Vấn đề là tôi không biết nguyên nhân gây ra sự cố và bản thân tôi không có vấn đề gì. Dưới đây là các bản ghi:

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) 

Các com.unity3d.player.UnityPlayer$c.run(Unknown Source:20) không thực sự hữu ích ở đây là nguồn gốc là không rõ, tôi đoán nó có thể đến từ một thư viện của bên thứ ba (GVR SDK, vải ...).

Có ai có cùng sự cố không?

Để tham khảo, chúng tôi đang sử dụng phiên bản Unity: 5.6.0f3 và lỗi chỉ được báo cáo cho điện thoại Pixel và Pixel XL.

Trả lời

0

Tôi không có tất cả chi tiết về dự án của bạn và các lỗi không thể sao chép nội bộ là loại tồi tệ nhất. Tuy nhiên, tôi sẽ cố gắng đưa ra một vài gợi ý về những gì đang xảy ra. Có lẽ những gợi ý có thể làm sáng tỏ và giúp bạn tìm ra nguyên nhân gốc rễ của lỗi:

CalledFromWrongThreadException

Trên Android, một Xem chỉ có thể được truy cập từ các chủ đề đã tạo ra nó. Điều này cũng đúng với các môi trường khác (WinForms, WPF, v.v.). Ngoại lệ này có nghĩa là một cái gì đó đang cố gắng truy cập vào một số yếu tố giao diện người dùng (SurfaceView) từ chuỗi sai.

com.unity3d.player.UnityPlayer $ c.run

Các vết đống bắt nguồn từ một số mã hệ thống ống nước tùy chỉnh Unity. Trong khi điều này không cung cấp cho một đầu mối mà cuộc gọi này đến từ (trong mã C# của bạn), nó có thể có nghĩa là mã đến từ C# (sử dụng AndroidJavaObject hoặc AndroidJavaClass cuộc gọi). Chuỗi chỉ lệnh của Unity không giống với chuỗi chính của Android và do đó điều này có ý nghĩa cùng với loại ngoại lệ bạn đang nhận được.

Là một thử nghiệm, tôi đã sử dụng mã này để mô phỏng cùng một ngoại lệ:

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

Điều này dẫn đến ngoại lệ sau đây, mà là rất tương tự như bạn đang nhận được (ít nhất là ở mình nguồn gốc).

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)

Tóm tắt

Như tôi đã đề cập trước đây, điều này chỉ cung cấp cho bạn một hướng đi nơi để xem xét. Hy vọng rằng bạn sẽ có thể tìm thấy các vị trí tiềm năng có thể là nguyên nhân của điều này (có thể là mã plugin). Tôi rất vui được hỗ trợ thêm (trong các ý kiến, hoặc cảm thấy tự do để contact me).