#android
Если накидать разных библиотек, то размер скомпилированного кода сильно увеличивается, то есть classes.dex в apk растет. Есть ли зависимость скорости вызова куска кода при старте убитого приложения от размера apk или же система просто возьмет нужный метод из далвик-кеша и начнет его выполнение не работая с полным образом? То есть если я сделаю приложение в 15мб кода, то будет ли в нем BroadcastReceiver-ы медленнее стартовать, чем в приложении в 20кб кода? Что насчет ART?
Ответы
Ответ 1
Точных деталей не знаю, но на сколько понимаю время загрузки будет зависеть не от размеров апк а от количества и размеров классов и ресурсов использующихся для и до показа первого экрана. Классы грузятся только по мере их использования, то есть пока ваш код никак не использует ни методы, ни константы, ни что либо ещё из класса, этот класс не будет загружен в память. С ресурсами примерно так же. Так что если если вы напихаете туеву кучу либ и никак их использовать не будете и у них в манифестах не прописано никаких автозапускающихся сервисов или ещё чего, то они если и скажутся на скорости запуска, то на какие-нибудь сотые процентов. Если посмотреть в исходниках андройда реализацию BaseDexClassLoader можно увидеть что он грузит классы через DexPathList, который по сути просто является списком DexFile. К сожалению DexFile не содержит кода по которому было бы видно как именно он открывает apk файл и как именно загружает конкретный класс, эти методы реализованы нативно и я не знаю где можно глянуть их сорци, так что возможно что при открытии dex файла из apk он целиком грузится в память а метод загрузки конкретного класса уже разворачивает этот класс от туда.
Комментариев нет:
Отправить комментарий