Android: приложение часто дает сбой при мгновенном запуске

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

Приложение очень часто выдает неожиданные ошибки, которые разрешаются, если я выполняю чистую сборку.

Например, иногда существуют исключения класса «не найден», когда класс действительно существует. Кроме того, иногда возникают исключения при приведении классов при попытке привести View, возвращаемый findViewById(), к целевому типу (вероятно, студия Android неверно истолковала идентификаторы элементов при горячем развертывании макетов).

Все эти ошибки устраняются без изменения кода, просто выполняя полную сборку. Благодаря мгновенному запуску процесс сборки для меня стал в два или три раза медленнее.

Почему я получаю эти ошибки? Кто-нибудь знает, как заставить работать мгновенный запуск правильно?


person Lahiru Chandima    schedule 24.06.2016    source источник
comment
Используйте код обработки исключений (блоки try / catch) соответствующим образом. Блоки try / catch вокруг кода, который потенциально может генерировать исключение, и при необходимости используйте блок finally для очистки ресурсов.   -  person Developer    schedule 24.06.2016
comment
У меня была та же проблема, вместо этого сделайте полную сборку, когда вы когда-нибудь захотите протестировать ее на другом устройстве, отличном от вашего эмулятора или устройства, которое вы используете для тестирования.   -  person karan vs    schedule 15.07.2016
comment
тогда как мы можем воспользоваться мгновенным запуском @karanvs   -  person Killer    schedule 11.11.2017
comment
Сначала попробуйте использовать последнюю и стабильную версию Android Studio, если вы не используете ее в настоящее время.   -  person karan vs    schedule 11.11.2017


Ответы (4)


Ты не единственный. Instant Run в настоящее время немного стабилен, или, можно сказать, ненадежен.

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

Мгновенный запуск полезен при редактировании незначительного размещения графического интерфейса пользователя, я хочу сказать, что это единственный полезный сценарий в настоящее время, поэтому я рекомендую вам отключить его во время общей разработки. Вы можете отключить его, сняв флажок Settings > Build, Execution, Deployment > Enable Instant Run to hot swap....

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

person Youngjae    schedule 24.06.2016

Instant Run по-прежнему полон ошибок. Даже Google говорит, что:

Instant Run предназначен для ускорения процесса сборки и развертывания в большинстве ситуаций. Однако есть некоторые аспекты использования Instant Run, которые могут повлиять на его поведение и совместимость с вашим приложением. Если у вас возникнут другие проблемы при использовании Instant Run, сообщите об ошибке

Он добавляет некоторые файлы dex в наше приложение, чтобы ускорить процесс сборки и развертывания. Иногда, когда вы меняете макет, затем выполняете сборку и запускаете проект, он все еще показывает старый макет. Даже созданный им apk не будет работать на некоторых устройствах.

А пока лучше выключим:

Чтобы отключить мгновенный запуск:

  1. Откройте диалог настроек или предпочтений.
  2. Перейдите к Сборке, Выполнению, Развертыванию> Мгновенный запуск.
  3. Снимите флажок рядом с Enable Instant Run.
person ישו אוהב אותך    schedule 24.06.2016

Это документ о мгновенном запуске:

  1. Android Studio теперь развертывает чистые сборки быстрее, чем когда-либо прежде. Кроме того, отправка инкрементальных изменений кода в эмулятор или физическое устройство теперь происходит почти мгновенно. Просматривайте свои обновления без повторного развертывания новой отладочной сборки или, во многих случаях, без перезапуска приложения.
  2. Instant Run supports pushing the following changes to a running app:
    • Changes to the implementation of an existing instance method or static method
    • Изменения в существующем ресурсе приложения
    • Изменения структурного кода, например сигнатуры метода или статического поля (требуется целевое устройство с API уровня 21 или выше).

Поэтому я думаю, что когда вы добавляете новый класс или новый view_id, вам нужно очистить - перестроить свой проект. Это всего лишь мое мнение, поправьте меня, если я ошибаюсь. Дополнительная информация о Instant Run

person Fuyuba    schedule 24.06.2016

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

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

person Lahiru Chandima    schedule 05.09.2016