На самом деле очень мало различий между тем, как работает Горячая перезагрузка Флаттера и Мгновенный запуск Android Studio .
Они оба проверяют наличие изменений кода, выполняют этап компиляции только для того, что изменилось, а затем отправляют его на телефон для запуска. Приложения Android и Flutter используют виртуальную машину (jvm или dart vm), которая способна изменять классы на лету.
Когда вы выполняете Flutter Hot Reload , он выполняет быстрый пошаговый этап компиляции, а затем отправляет ваш код дротика на телефон, где он запускается практически мгновенно. Это происходит так быстро, отчасти потому, что Flutter использует JIT-модель компиляции при работе в режиме отладки, что означает, что компиляция тратит меньше времени, но первый запуск (или первые несколько прогонов) метода может быть не оптимизирован. Состояние сохраняется между изменениями во многих случаях из-за того, как работает флаттер, а не из-за чего-то, свойственного JIT-обработке дротиком. А для некоторых вещей (на ум приходят статические функции и функции initState) вам действительно нужно выполнить Full Reload , который повторно инициализирует состояние приложения, но все еще почти мгновенно.
Что такое Android Studio для Instant Run очень похоже, но всегда полностью компилируется. ВМ имеет некоторые инструменты, поэтому при вызове метода ВМ проверяет, введен ли новый класс. Instant Run сделает все возможное, чтобы заменить как можно меньше; если он может просто заменить некоторые классы, которые он будет делать, но он часто должен заменить всю деятельность, а иногда и все приложение. Вот хорошая диаграмма из этого блога (которую стоит прочитать, если вы хотите глубже понять):
Функционально, Мгновенный запуск и Горячая перезагрузка должны быть очень похожи. Однако на практике я обнаружил, что Hot Reload флаттера довольно намного быстрее, чем Instant Run , особенно для приложений любого размера.
Кроме того, я обнаружил, что то, как флаттер работает с состояниями, гораздо лучше подходит для пересчитанных классов, чем для действий Android. Во Flutter у вас есть много классов, связанных с пользовательским интерфейсом, каждый со своим собственным состоянием, и изменение только нескольких из них довольно быстро. В качестве альтернативы, в Android вы, как правило, имеете большие представления или пользовательский интерфейс действий, для замены которых требуется больше усилий, и часто это приводит к перезагрузке действий, а не просто класса здесь и там.