Буфер обмена: TransactionTooLargeException: размер пакета данных - PullRequest
0 голосов
/ 10 апреля 2020

Я копирую большой текст в буфер обмена программным способом.

    ClipboardManager clipboardManager = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
    ClipData clipData = ClipData.newPlainText("Log", log.toString());
    clipboardManager.setPrimaryClip(clipData);

Если текст слишком большой, я получаю следующее исключение:

java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 1048812 bytes
at android.content.ClipboardManager.setPrimaryClip(ClipboardManager.java:144)

Как узнать предел и скопировать как можно больше текста?

1 Ответ

0 голосов
/ 10 апреля 2020

Иногда это смертельная ошибка, но согласно документации, по какой причине эта ошибка появляется

Ключом к исключению TransactionTooLargeException является сохранение относительно небольших транзакций. Постарайтесь минимизировать объем памяти, необходимый для создания Parcel для аргументов и возвращаемого значения удаленного вызова процедуры. Избегайте передачи огромных массивов строк или больших растровых изображений. Если возможно, попытайтесь разбить большие запросы на более мелкие части.

Если вы внедряете службу, это может помочь наложить ограничения по размеру или сложности на запросы, которые могут выполнять клиенты. Например, если набор результатов может стать большим, не позволяйте клиенту запрашивать более нескольких записей одновременно. В качестве альтернативы, вместо того, чтобы возвращать все доступные данные одновременно, сначала верните необходимую информацию, а затем заставьте клиента запрашивать дополнительную информацию по мере необходимости.

Я столкнулся с той же ошибкой, поскольку передавал большой объем данных через намерения я использую переменные stati c для установки данных.

...