我发现许多与此标题相关的重复问题,但没有一个与我的问题有关,因为我的问题无法通过crashlytics进行追踪。关于这个标题我一直收到许多不同的崩溃。
检查这个例子(它只在android 4上发生):
Fatal Exception: java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.ComparableTimSort.mergeHi(ComparableTimSort.java:831)
at java.util.ComparableTimSort.mergeAt(ComparableTimSort.java:449)
at java.util.ComparableTimSort.mergeCollapse(ComparableTimSort.java:372)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:178)
at java.util.ComparableTimSort.sort(ComparableTimSort.java:142)
at java.util.Arrays.sort(Arrays.java:1970)
at java.util.Collections.sort(Collections.java:1864)
at android.view.ViewGroup$ChildListForAccessibility.init(ViewGroup.java:6872)
at android.view.ViewGroup$ChildListForAccessibility.obtain(ViewGroup.java:6837)
at android.view.ViewGroup.dispatchPopulateAccessibilityEventInternal(ViewGroup.java:2706)
at android.view.View.dispatchPopulateAccessibilityEvent(View.java:5217)
at android.view.ViewGroup.dispatchPopulateAccessibilityEventInternal(ViewGroup.java:2712)
at android.view.View.dispatchPopulateAccessibilityEvent(View.java:5217)
at android.view.View.sendAccessibilityEventUncheckedInternal(View.java:5177)
at android.view.View.sendAccessibilityEventUnchecked(View.java:5159)
at android.view.View.sendAccessibilityEventInternal(View.java:5136)
at android.view.View.sendAccessibilityEvent(View.java:5105)
at android.view.View.performClick(View.java:4649)
at android.view.View$PerformClick.run(View.java:19438)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:146)
at android.app.ActivityThread.main(ActivityThread.java:5602)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
at dalvik.system.NativeStart.main(NativeStart.java)
我通过研究发现,在比较/排序的同时错过了某种情况时会发生这种情况。同时在我的代码中,我不使用文档/示例中提到的比较或排序方法。
任何建议都非常感谢。
这似乎是@bwt所指出的AOSP的错误。
该错误是框架API的一部分:http://www.docjar.com/html/api/java/util/ComparableTimSort.java.html(第835行)
在这种情况下,Android源代码中出现了错误,因为您构建布局的方式,特别是组织ViewGroup元素的方式。
如果它只发生在Android 4上,解决它的一种方法是将你的minSdk升级到至少5.另一种方法是实现issue tracker link中描述的某些人的解决方案,这可能会导致你的应用程序失去一些辅助功能。 Anther的可能性是试图找到一种不同的方式来组织你的布局,不会崩溃,但由于导致崩溃的逻辑嵌入在AOSP中,这将耗尽你的控制,也许可以指望幸运。
我个人会去minSdk升级,根据Google的说法,由于今天Android 4中的用户数量,对你的应用程序的影响非常小。