Подтвердить что ты не робот

Есть ли ограничения в пакете android?

Я хочу знать, имеет ли размер данных пакета андроида верхний предел. Я пытаюсь отправить данные с помощью пакета, размер которого составляет > 80 тыс., И выбросить андроидальное фатальное исключение. Данные являются Serializable.

4b9b3361

Ответ 1

Я думаю, что предел равен 500kb. Вы можете сохранить переданный объект в файл и отправить путь к файлу в комплекте. Вы можете проверить аналогичный вопрос, заданный мной в fooobar.com/questions/454930/...

Ответ 2

Это зависит от цели комплекта. Сам пакет ограничен только объемом памяти.

Два основных использования для пакетов - это передача информации между компонентами с использованием намерений и сохранение состояния действий.

1. Намерения/привязки

Когда используется для передачи информации между компонентами Android, пакет последовательно преобразуется в транзакцию связующего. Общий размер всех транзакций связующего в процессе составляет 1 МБ. Если вы превысите этот предел, вы получите эту фатальную ошибку "!!! FAILED BINDER TRANSACTION!!!"

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

Ссылка: https://android.googlesource.com/platform/frameworks/base/+/jb-release/core/jni/android_util_Binder.cpp

ALOGE("!!! FAILED BINDER TRANSACTION !!!");
        // TransactionTooLargeException is a checked exception, only throw from certain methods.
        // FIXME: Transaction too large is the most common reason for FAILED_TRANSACTION
        //        but it is not the only one.  The Binder driver can return BR_FAILED_REPLY
        //        for other reasons also, such as if the transaction is malformed or
        //        refers to an FD that has been closed.  We should change the driver
        //        to enable us to distinguish these cases in the future.

Ссылка: http://developer.android.com/reference/android/os/TransactionTooLargeException.html

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

2. Сохраненное состояние экземпляра (действие onSaveInstanceState, onPause и т.д.)

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

Ответ 3

Я думаю, что максимальный размер пакета равен 1024 KiloBytes. Чтобы перенести большие объекты между действиями, вы должны попробовать другие способы (кэш памяти, локальное хранилище и т.д.).

Ответ 4

Да, у него есть, и теперь в андроиде Нуга он потерпит крах, если вы превысите предел примерно (500Kb).

проблема андроидной нуги

Ответ 5

В соответствии с Google Android API дата должна быть меньше 50K.

Ответ 6

Да, он имеет ограничение 1 МБ.

Вы можете использовать класс Singleton для передачи данных.