Архитектура навигации Android: сбой при включенном параметре Не сохранять действия - PullRequest
0 голосов
/ 25 октября 2018

В настоящее время я использую Android Arch Navigation (1.0.0-alpha06) в одном из моих проектов.Но время от времени я получаю один и тот же сбой в моих Crashlytics:

java.lang.RuntimeException: Unable to start activity ComponentInfo{*.*.*.MainActivity}: android.view.InflateException: Binary XML file line #29: Binary XML file line #29: Error inflating class fragment
Caused by: android.view.InflateException: Binary XML file line #29: Binary XML file line #29: Error inflating class fragment
Caused by: android.view.InflateException: Binary XML file line #29: Error inflating class fragment
Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@1e9584c: Unmarshalling unknown type code 7274595 at offset 516

Так что после выяснения, почему у меня было несколько сбоев на MainActivity, я настроил свое устройство, чтобы не сохранять действия (параметры разработчика).И Бэм!каждый раз, когда я отправляю свое приложение в фоновый режим и возвращаюсь, приложение вылетает.

У меня не настроено ничего для onSaveInstanceState/onRestoreInstanceState методов.Так что я не знаю, где искать.

Это происходит с включенным Proguard или без него (я тестирую его как с отладочной, так и с выпускной версией), поэтому я могу исключить отсутствующее правило Proguard.

Другая информация, которая может помочь: Мое приложение использует android.arch библиотеки (MVVM).

Редактировать: У меня нет доступа к диспетчеру фрагментов как таковому, за управление отвечает Библиотека навигации.фрагменты, поэтому любая другая ошибка, связанная с инфляцией фрагментов, не связана

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

ОК. Наконец-то я нашел причину сбоя ... Я использовал одну пользовательскую библиотеку просмотра, которая неправильно управляла собственной логикой восстановления экземпляра.

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

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

0 голосов
/ 25 октября 2018

Имейте в виду, что Android по-прежнему будет выполнять некоторую работу по сохранению состояния экземпляра, если вы не переопределите методы в своих действиях и фрагментах, чтобы ничего не делать.

  @Override
  protected void onSaveInstanceState(Bundle outState) {
    // don't restore state
  }

Во многих случаях мы делаем это из-за множества странных ошибокиначе.Подразумевается, что если ваше приложение будет извлечено из памяти, оно будет запущено на 100% при следующем обращении к нему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...