ANR при String.split
Использую для своих текстов классы для выравнивания текста с ГитХаба. Вот эти
Последнее время один из пользователей стал получать вот такой ANR (по логам из маркета):
#00 pc 000000000001f2ec /system/lib64/libc.so (syscall+28)
#00 pc 00000000000e0494 /system/lib64/libart.so (art::ConditionVariable::WaitHoldingLocks(art::Thread*)+148)
#00 pc 00000000003805e8 /system/lib64/libart.so (art::JNI::GetIntArrayElements(_JNIEnv*, _jintArray*, unsigned char*)+484)
#00 pc 0000000000023268 /system/lib64/libjavacore.so (MatcherState::updateOffsets(_JNIEnv*, _jintArray*)+60)
#00 pc 0000000000023004 /system/lib64/libjavacore.so (Matcher_findNextImpl(_JNIEnv*, _jclass*, long, _jintArray*)+64)
at java.util.regex.Matcher.findNextImpl (Native method)
at java.util.regex.Matcher.find (Matcher.java:482)
at java.util.regex.Pattern.split (Pattern.java:1127)
at java.lang.String.split (String.java:2455)
at java.lang.String.split (String.java:2497)
at com.(мой_домен).(мой_пакет).TextJustifyUtils.createWrappedLine (TextJustifyUtils.java:100)
at com.(мой_домен).(мой_пакет).TextViewEx.onDraw (TextViewEx.java:162)
at android.view.View.draw (View.java:20483)
at android.view.View.updateDisplayListIfDirty (View.java:19294)
...и т.д. в том же духе
Фрагмент кода с ошибкой:
protected static Object[] createWrappedLine(String block, Paint paint, float spaceOffset, float maxWidth) {
float cacheWidth = maxWidth;
float origMaxWidth = maxWidth;
StringBuilder line = new StringBuilder();
!!! for (String word : block.split("\\s")) { <== ANR вылетает здесь
cacheWidth = paint.measureText(word);
maxWidth -= cacheWidth;
if (maxWidth <= 0) {
return new Object[]{line.toString(), maxWidth + cacheWidth + spaceOffset};
}
line.append(word).append(" ");
maxWidth -= spaceOffset;
}
if (paint.measureText(block) <= origMaxWidth) {
return new Object[]{block, Float.MIN_VALUE};
}
return new Object[]{line.toString(), maxWidth};
}
Текстов в приложении много, но вылетает только один. И далеко не у всех. Вынести в отдельный поток не получается - работаю с отображением текста.
Не понимаю, как оставить Split и побороть ANR.