Android在TextView中崩溃,带有IndexOutOfBoundsException,没有自定义代码跟踪

Android在TextView中崩溃,带有IndexOutOfBoundsException,没有自定义代码跟踪,android,android-9.0-pie,Android,Android 9.0 Pie,在运行Android9的设备上,我的Android应用程序在TextView的某个地方崩溃。它发生在SpannableStringBuilder.checkRange中的参数验证期间。我的应用程序中有相当多的TextView对象,但不清楚到底是哪一个导致了问题以及原因,因为堆栈跟踪中没有提供自定义代码 这是一个非常罕见的崩溃,我无法重现它,所以使用调试器不是一个选项。Play Store报告此崩溃的以下设备、版本和版本: Samsung Galaxy S10+ (beyond2q), Andro

在运行Android9的设备上,我的Android应用程序在TextView的某个地方崩溃。它发生在SpannableStringBuilder.checkRange中的参数验证期间。我的应用程序中有相当多的TextView对象,但不清楚到底是哪一个导致了问题以及原因,因为堆栈跟踪中没有提供自定义代码

这是一个非常罕见的崩溃,我无法重现它,所以使用调试器不是一个选项。Play Store报告此崩溃的以下设备、版本和版本:

Samsung Galaxy S10+ (beyond2q), Android 9 
我已经反编译了SpannableStringBuilder.checkRange,它的第1326行在最后一个条件下指向“throw”语句,如下所示:

start < 0 || end < 0

您的
文本视图是在code中定义的还是在
xml中定义的?它们是否在代码中指定了值?在
setText
TextView
s的类似函数之前放置一个调试器,然后查看哪个
TextView
正在崩溃。我最近看到了这个。。。您是否与剪贴板进行过交互?@kushpf主要使用xml格式,但也可能会动态创建一些。要使用调试器,我应该能够重现,但我不能。这是一个非常罕见的崩溃。@jesses.co.tt是的,我确实在某些情况下使用剪贴板。请让我知道我应该在剪贴板中检查什么逻辑我认为这实际上是安卓10的问题,而不是9,现在我想起来了。。。
private void checkRange(final String operation, int start, int end) {
    if (end < start) {
        throw new IndexOutOfBoundsException(operation + " " +
                region(start, end) + " has end before start");
    }

    int len = length();

    if (start > len || end > len) {
        throw new IndexOutOfBoundsException(operation + " " +
                region(start, end) + " ends beyond length " + len);
    }

    if (start < 0 || end < 0) {
        throw new IndexOutOfBoundsException(operation + " " +
                region(start, end) + " starts before 0");
    }
}
    java.lang.IndexOutOfBoundsException: 
      at android.text.SpannableStringBuilder.checkRange (SpannableStringBuilder.java:1326)
      at android.text.SpannableStringBuilder.setSpan (SpannableStringBuilder.java:682)
      at android.text.SpannableStringBuilder.setSpan (SpannableStringBuilder.java:674)
      at android.text.method.ArrowKeyMovementMethod.onTouchEvent (ArrowKeyMovementMethod.java:255)
      at android.widget.TextView.onTouchEvent (TextView.java:11355)
      at android.view.View.dispatchTouchEvent (View.java:13484)
      at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3222)
      at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2845)
      at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3222)
      at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2845)
      at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3222)
      at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2845)
      at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3222)
      at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2845)
      at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3222)
      at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2845)
      at android.view.ViewGroup.dispatchTransformedTouchEvent (ViewGroup.java:3222)
      at android.view.ViewGroup.dispatchTouchEvent (ViewGroup.java:2845)
      at com.android.internal.policy.DecorView.superDispatchTouchEvent (DecorView.java:697)
      at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent (PhoneWindow.java:1879)
      at android.app.Activity.dispatchTouchEvent (Activity.java:3487)
      at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent (WindowCallbackWrapper.java:69)
      at com.android.internal.policy.DecorView.dispatchTouchEvent (DecorView.java:655)
      at android.view.View.dispatchPointerEvent (View.java:13732)
      at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent (ViewRootImpl.java:6119)
      at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess (ViewRootImpl.java:5897)
      at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:5346)
      at android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:5399)
      at android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:5365)
      at android.view.ViewRootImpl$AsyncInputStage.forward (ViewRootImpl.java:5524)
      at android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:5373)
      at android.view.ViewRootImpl$AsyncInputStage.apply (ViewRootImpl.java:5581)
      at android.view.ViewRootImpl$InputStage.deliver (ViewRootImpl.java:5346)
      at android.view.ViewRootImpl$InputStage.onDeliverToNext (ViewRootImpl.java:5399)
      at android.view.ViewRootImpl$InputStage.forward (ViewRootImpl.java:5365)
      at android.view.ViewRootImpl$InputStage.apply (ViewRootImpl.java:5373)
      at android.view.ViewRootImpl$InputStage.deliver 
(ViewRootImpl.java:5346)
      at android.view.ViewRootImpl.deliverInputEvent (ViewRootImpl.java:8408)
      at android.view.ViewRootImpl.doProcessInputEvents (ViewRootImpl.java:8341)
      at android.view.ViewRootImpl.enqueueInputEvent (ViewRootImpl.java:8294)
      at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent (ViewRootImpl.java:8523)
      at android.view.InputEventReceiver.dispatchInputEvent (InputEventReceiver.java:198)
      at android.os.MessageQueue.nativePollOnce (MessageQueue.java)
      at android.os.MessageQueue.next (MessageQueue.java:326)
      at android.os.Looper.loop (Looper.java:181)
      at android.app.ActivityThread.main (ActivityThread.java:7037)
      at java.lang.reflect.Method.invoke (Method.java)
      at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:494)
      at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:965)