Редактирование длинного текста TextView вызывает ошибку «НЕУДАЧНАЯ ТРАНЗАКЦИЯ СВЯЗУЮЩЕГО» в коде доступности

#java #android

#java #Android

Вопрос:

У меня есть TextView с довольно длинным документом в нем (~ 1800 строк, 70 тыс. символов). Для обеспечения форматирования в документе применено несколько интервалов. Все это работает довольно хорошо.

Однако при редактировании текста я периодически получаю следующую ошибку:

 E/JavaBinder: !!! FAILED BINDER TRANSACTION !!!  (parcel size = 119652)
E/AccessibilityManager: Error during sending EventType: TYPE_VIEW_TEXT_SELECTION_CHANGED; EventTime: 67446779; PackageName: <package name>; MovementGranularity: 0; Action: 0; ContentChangeTypes: []; WindowChangeTypes: [] [ ClassName: android.widget.EditText; Text: [

<ENTIRE CONTENTS OF DOCUMENT>

]; ContentDescription: null; ItemCount: 78607; CurrentItemIndex: -1; Enabled: true; Password: false; Checked: false; FullScreen: false; Scrollable: false; BeforeText: null; FromIndex: 78585; ToIndex: 78585; ScrollX: 0; ScrollY: 0; MaxScrollX: 0; MaxScrollY: 0; ScrollDeltaX: -1; ScrollDeltaY: -1; AddedCount: -1; RemovedCount: -1; ParcelableData: null ]; recordCount: 0 
    android.os.DeadObjectException: Transaction failed on small parcel; remote process probably died
        at android.os.BinderProxy.transactNative(Native Method)
        at android.os.BinderProxy.transact(BinderProxy.java:540)
        at android.view.accessibility.IAccessibilityManager$Stub$Proxy.sendAccessibilityEvent(IAccessibilityManager.java:580)
E/AccessibilityManager:     at android.view.accessibility.AccessibilityManager.sendAccessibilityEvent(AccessibilityManager.java:606)
        at android.view.ViewRootImpl.requestSendAccessibilityEvent(ViewRootImpl.java:8618)
        at android.view.ViewGroup.requestSendAccessibilityEvent(ViewGroup.java:1094)
        at android.view.ViewGroup.requestSendAccessibilityEvent(ViewGroup.java:1094)
        at android.view.ViewGroup.requestSendAccessibilityEvent(ViewGroup.java:1094)
        at android.view.ViewGroup.requestSendAccessibilityEvent(ViewGroup.java:1094)
        at android.view.ViewGroup.requestSendAccessibilityEvent(ViewGroup.java:1094)
        at android.view.ViewGroup.requestSendAccessibilityEvent(ViewGroup.java:1094)
        at android.view.ViewGroup.requestSendAccessibilityEvent(ViewGroup.java:1094)
        at android.view.ViewGroup.requestSendAccessibilityEvent(ViewGroup.java:1094)
        at android.view.ViewGroup.requestSendAccessibilityEvent(ViewGroup.java:1094)
        at android.view.View.requestParentSendAccessibilityEvent(View.java:8333)
        at android.view.View.sendAccessibilityEventUncheckedInternal(View.java:8326)
        at android.view.View.sendAccessibilityEventUnchecked(View.java:8297)
        at android.widget.TextView.sendAccessibilityEventUnchecked(TextView.java:12217)
        at android.view.View.sendAccessibilityEventInternal(View.java:8274)
        at android.widget.TextView.sendAccessibilityEventInternal(TextView.java:12206)
        at android.view.View.sendAccessibilityEvent(View.java:8238)
        at android.widget.TextView.onSelectionChanged(TextView.java:10488)
 

Иногда это также приводит к сбою приложения.

Насколько я могу судить, это вызвано тем, что код службы доступности пытается отправить много данных как часть намерения.

Может кто-нибудь рассказать о том, как я мог бы это предотвратить. Я знаю, что мог бы просто заблокировать запуск кода доступности (т. Е. Переопределить метод в TextView), Но я бы предпочел не мешать пользователям, которые полагаются на доступность.

Комментарии:

1. Вы можете попробовать сделать это таким образом android.jlelse.eu/… Огромный текст оптимизирован не очень хорошо, поэтому вам следует использовать некоторые хитрости, чтобы улучшить его визуализацию и восприятие

2. @frANTicBee Это может работать для текстового представления, доступного только для чтения, но не для редактируемого текстового представления. Приложение, над которым я работаю, по сути, представляет собой текстовый редактор.

3. Если я сделаю что-то подобное — я хотел бы сделать их просто текстом и превратить его в EditText, только нажав на абзац. кажется, что пользователю не нужно видеть все 1800 строк одновременно и исправлять их все подряд