web-dev-qa-db-ja.com

IndexOutOfBoundsException in Android 8.0 Outside Code on SpannableStringBuilder.checkRange

問題

Android 8.0にアップグレードしてから、コードの外部で発生したIndexOutOfBoundsExceptionを示すクラッシュレポートが多数表示されます。

クラッシュレポート

にコードはありませんAndroid クラッシュの原因となったアプリで、Android自体のバグのようです。

Java.lang.IndexOutOfBoundsException: 
  at Android.text.SpannableStringBuilder.checkRange (SpannableStringBuilder.Java:1314)
  at Android.text.SpannableStringBuilder.setSpan (SpannableStringBuilder.Java:680)
  at Android.text.SpannableStringBuilder.setSpan (SpannableStringBuilder.Java:672)
  at Android.view.accessibility.AccessibilityNodeInfo.setText (AccessibilityNodeInfo.Java:2474)
  at Android.widget.TextView.onInitializeAccessibilityNodeInfoInternal (TextView.Java:10357)
  at Android.view.View.onInitializeAccessibilityNodeInfo (View.Java:7307)
  at Android.view.View.createAccessibilityNodeInfoInternal (View.Java:7266)
  at Android.view.View.createAccessibilityNodeInfo (View.Java:7251)
  at Android.view.accessibility.AccessibilityRecord.setSource (AccessibilityRecord.Java:146)
  at Android.view.accessibility.AccessibilityRecord.setSource (AccessibilityRecord.Java:119)
  at Android.view.View.onInitializeAccessibilityEventInternal (View.Java:7203)
  at Android.widget.TextView.onInitializeAccessibilityEventInternal (TextView.Java:10338)
  at Android.view.View.onInitializeAccessibilityEvent (View.Java:7191)
  at Android.view.View.sendAccessibilityEventUncheckedInternal (View.Java:7053)
  at Android.view.View.sendAccessibilityEventUnchecked (View.Java:7038)
  at Android.view.View.sendAccessibilityEventInternal (View.Java:7015)
  at Android.widget.TextView.sendAccessibilityEventInternal (TextView.Java:10725)
  at Android.view.View.sendAccessibilityEvent (View.Java:6982)
  at Android.widget.TextView.onSelectionChanged (TextView.Java:9269)
  at Android.widget.TextView.spanChange (TextView.Java:9505)
  at Android.widget.TextView$ChangeWatcher.onSpanRemoved (TextView.Java:11943)
  at Android.text.SpannableStringInternal.sendSpanRemoved (SpannableStringInternal.Java:408)
  at Android.text.SpannableStringInternal.removeSpan (SpannableStringInternal.Java:243)
  at Android.text.SpannableString.removeSpan (SpannableString.Java:50)
  at Android.text.Selection.removeSelection (Selection.Java:109)
  at Android.text.method.LinkMovementMethod.onTakeFocus (LinkMovementMethod.Java:239)
  at Android.widget.Editor.onFocusChanged (Editor.Java:1163)
  at Android.widget.TextView.onFocusChanged (TextView.Java:9586)
  at Android.view.View.handleFocusGainInternal (View.Java:6593)
  at Android.view.View.requestFocusNoSearch (View.Java:10823)
  at Android.view.View.requestFocus (View.Java:10802)
  at Android.view.ViewGroup.onRequestFocusInDescendants (ViewGroup.Java:3204)
  at Android.view.ViewGroup.requestFocus (ViewGroup.Java:3160)
  at Android.view.ViewGroup.onRequestFocusInDescendants (ViewGroup.Java:3204)
  at Android.view.ViewGroup.requestFocus (ViewGroup.Java:3160)
  at Android.view.ViewGroup.onRequestFocusInDescendants (ViewGroup.Java:3204)
  at Android.view.ViewGroup.requestFocus (ViewGroup.Java:3160)
  at Android.view.ViewGroup.onRequestFocusInDescendants (ViewGroup.Java:3204)
  at Android.view.ViewGroup.requestFocus (ViewGroup.Java:3160)
  at Android.view.ViewGroup.onRequestFocusInDescendants (ViewGroup.Java:3204)
  at Android.view.ViewGroup.requestFocus (ViewGroup.Java:3160)
  at Android.view.ViewGroup.onRequestFocusInDescendants (ViewGroup.Java:3204)
  at Android.view.ViewGroup.requestFocus (ViewGroup.Java:3160)
  at Android.view.ViewGroup.onRequestFocusInDescendants (ViewGroup.Java:3204)
  at Android.view.ViewGroup.requestFocus (ViewGroup.Java:3160)
  at Android.view.ViewGroup.onRequestFocusInDescendants (ViewGroup.Java:3204)
  at Android.view.ViewGroup.requestFocus (ViewGroup.Java:3160)
  at Android.view.ViewGroup.onRequestFocusInDescendants (ViewGroup.Java:3204)
  at Android.view.ViewGroup.requestFocus (ViewGroup.Java:3163)
  at Android.view.View.requestFocus (View.Java:10769)
  at Android.view.View.requestFocus (View.Java:10711)
  at Android.view.ViewRootImpl.focusableViewAvailable (ViewRootImpl.Java:3430)
  at Android.view.View.setFlags (View.Java:13277)
  at Android.view.View.setVisibility (View.Java:9378)
  at Android.app.Activity.makeVisible (Activity.Java:5412)
  at Android.app.ActivityThread.handleResumeActivity (ActivityThread.Java:3785)
  at Android.app.ActivityThread.handleLaunchActivity (ActivityThread.Java:2898)
  at Android.app.ActivityThread.-wrap11 (Unknown Source)
  at Android.app.ActivityThread$H.handleMessage (ActivityThread.Java:1593)
  at Android.os.Handler.dispatchMessage (Handler.Java:105)
  at Android.os.Looper.loop (Looper.Java:164)
  at Android.app.ActivityThread.main (ActivityThread.Java:6541)
  at Java.lang.reflect.Method.invoke (Native Method)
  at com.Android.internal.os.Zygote$MethodAndArgsCaller.run (Zygote.Java:240)
  at com.Android.internal.os.ZygoteInit.main (ZygoteInit.Java:767)

考えられる原因

それはTextViewで発生するので、私が使用するこれらの要素に関係していると思います。

         <TextView
              Android:id="@+id/txtAlso"
              Android:layout_width="0dp"
              Android:layout_weight="1"
              Android:layout_height="wrap_content"
              Android:textColor="#0000AA"
              Android:padding="5dp"
              Android:textIsSelectable="true"
              Android:text="" />

試行されたソリューション

このバグをうまく修正するために、TextViewsを以下のコードに書き直し、isSelectableタグを削除して、ビューがフォーカスされないようにしました。自分でバグを再現することはできないので、すぐにもっと情報を得たいと思っています。誰かが情報、洞察を持っているか、解決策の返信やコメントを知っている場合。

         <TextView
              Android:id="@+id/txtAlso"
              Android:layout_width="0dp"
              Android:layout_weight="1"
              Android:layout_height="wrap_content"
              Android:textColor="#0000AA"
              Android:padding="5dp"
              Android:focusable="false" Android:focusableInTouchMode="false"
              Android:text="" />
21
Bas van Stein

アプリでも同じクラッシュが発生しました。たくさんの研究とテストの後、私はなんとかそれを再現することができました。クラッシュはOreo Android 8.0デバイスでのみ発生し、ほとんどSamsungデバイスでのみ発生しました。

私の場合、Linkifyによって作成されたリンクをクリックすると、IndexOutOfBounds例外がトリガーされました。

Linkify.addLinks(text, path, null, matchFilter, transforFilter);

Linkifyを削除し、Linkifyなしで必要なことを行う別の方法を見つけました。

4
Anders