2016-09-15 5 views
2

На Android N всякий раз, когда я передаю несколько бинарных или больших данных в комплекте, я получаю TransactionTooLargeException, однако он работает без проблем на Android-M и ниже.Почему Android N бросает TransactionTooLargeException при использовании Bundles?

Как я могу это решить?

+0

@VivekMishra это пытается решить вопрос не только заявить, почему это происходит не дубликат –

+0

Чтобы добавить к уже существующему ответ я отправляю ссылку на блог, который имеет образец кода HTTP: //blog.sqisland.com/2016/09/transactiontoolargeexception-crashes-nougat.html – Raghunandan

+0

@Raghunandan Вы можете редактировать ответ и добавить ссылку –

ответ

16

Там было изменение поведения в Android N

Цитирование the docs:

Многие API-интерфейсы платформы уже начали проверку на большие полезные данные отправленное через Binder сделок, а теперь система rethrows TransactionTooLargeExceptions как RuntimeExceptions, вместо беззвучный каротаж или подавление их. Одним из распространенных примеров является хранение слишком большого количества данных в Activity.onSaveInstanceState(), что вызывает ActivityThread.StopInfo, чтобы выбросить RuntimeException, когда ваше приложение целей Android 7.0.

Примечание: Программы ориентации M или ниже не будет бросать исключение, они просто молча войти или подавить их

Как решить эту проблему:

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

  1. Если двоичные данные или растровые, то лучше сохранить его в файл и пройти путь в пачке.

  2. Если вы передаете слишком много объектов

    • Вы можете использовать библиотеки как Otto, EventBus, чтобы избежать этого.

    • Просто передайте необходимую информацию, необходимую для создания объекта еще раз.

    • Создайте одноэлементный класс и установите там данные и получите доступ к нему в другом Управлении или фрагменте.

+0

Итак, это всегда было неудачно, это просто не сработало? –

+0

@KevinKrumwiede да, поскольку документы –