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

Недостатки при использовании Multidexing для Android

Недавно я прочитал о пределе метода Dalvik 65K. Я понял, что список вызовов метода может вызывать только первые обращения к методу 65536. Чтобы решить эту проблему, мы имеем ряд решений. Один из них - мультисайдинг, в котором мы разделили файлы .dex на число классов [classes.dex, classes1.dex...], используя библиотеку поддержки Android.

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

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

4b9b3361

Ответ 1

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

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

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

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

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

Уменьшает количество методов стоит

НЕТ

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

Ответ 2

Основной недостаток - больший размер dex/apk. Файлы Dex имеют пулы констант, которые распределяются между всеми классами этого файла dex. Когда классы разбиваются на несколько файлов dex, эти общие константы должны дублироваться в каждом файле dex, в котором они используются.

Ответ 3

Обычно говорят о недостатках multidex: увеличение размера APK, возможно, более медленный запуск приложения и увеличение объема используемой памяти.

Причина этого заключается в том, что некоторые данные (например, StringData) не могут совместно использоваться и поэтому должны быть частично сохранены в нескольких файлах DEX одновременно. StringData состоит из строковых литералов, загруженных из кода, а также имен классов, методов и полей и обычно составляет до 20% от общего DEX файла.

Но фактические недостатки (помимо размера APK) сильно зависят от версии Android, на которой вы запускаете приложение.

Google оптимизировал Android Runtime (ART), чтобы устранить эти недостатки. В Android O (API 26) появился контейнер VDEX для хранения предварительно проверенных файлов DEX. С Android P Google дополнительно оптимизировал прекомпилятор (кодовое имя CompactDex) и добавил раздел общих данных в контейнер VDEX для дедупликации данных, используемых в нескольких файлах DEX. Таким образом, при запуске мультидексных приложений на Android P практически нет недостатка.

Источники: что нового в Android Runtime (Google I/O '18)

Ответ 4

Сам мультисайдинг - это неработающий термин, если приложение multidex означает, что существует бремя над внутренним процессом android, выполняющим приложение.

Каждое приложение для Android работает внутри одного процесса (задачи), когда его мультимедированный означает, что процесс разделен на части, которые собираются создавать проблемы с производительностью с небольшим процессором Android, независимо от того, как вы пишете код.

Я согласен с aakash kava в том, что почти все приложения мультимедированы, потому что теперь процессоры для Android отлично работают в производительности, а операционная система Android отличная, но это не означает, что мы должны игнорировать мультисайдинг.