Разработка
Разработка приложений для Android Go: ключевые аспекты
Android Go это версия Android, оптимизированная для работы на устройствах, которые не могут обеспечить приложениям высокую производительность и большой объем памяти. Вы не поверите: они существуют! И даже в предостаточном количестве. В этой статье JetRuby Agency рассказывает о ключевых аспектах, на которые стоит обратить внимание при разработке приложений под Android Go.
Почему Android Go
Но сначала мы расскажем, почему пользователи выбирают именно Android Go, а не Oreo или Pie:
- В сравнению с обычной версией Android Oreo, он быстрее
- Он требует меньше памяти устройства
- Он требует меньше оперативной памяти.
С причинами разобрались, переходим к принципам разработки приложений.
Проверяйте качество соединения
В целом, способность приложения запрашивать и предоставлять информацию зависит от качества интернет подключения. Тут мы не срываем никаких покровов. Поэтому перед загрузкой данных необходимо отслеживать статус интернет соединения.
Вы можете сделать это таким образом:
А так можно узнать статус интернет соединения, его качество, а также проверить подключено ли устройство к metered network:
Обратите внимание на количество и качество запросов. Чем хуже соединение, тем ниже должно быть разрешение медиаконтента.
Размер APK файла должен быть, как можно меньшим
Пользователи не всегда имеют возможность загружать приложения с большим размером APK-файла. А иногда и вовсе избегают громоздких приложений. Ведь все прекрасно понимают, что размер APK-файла влияет на время скачивания и загрузку памяти.
Старайтесь, чтобы размер APK-файла не превышал 10 mb. Ведь одним из лучших способов уменьшить размер вашего приложения является уменьшение числа задействованных ресурсов.
Теперь о том, как это сделать. Изменить количество и вес ресурсов в APK можно с помощью инструмента Lint. Lint это анализатор кода в Android Studio. Он находит (но не удаляет) ресурсы в папке res/, на которые нет ссылок в коде программы. Однако следует помнить, что Lint не сканирует папку assets/ .
В консоли Lint запускается с помощью команды:
./gradlew lint
Далее вы можете ознакомится с результатом работы в консоли, либо открыть файл /app/build/reports/lint-results.html :
Зависимости, которые вы добавляете в проект, могут содержать неиспользуемые ресурсы. Gradle же их автоматически удаляет, если вы используете shrinkResources в файле build.gradle вашего приложения. Для удаления неиспользуемого кода стоит применить ProGuard minifyEnabled. Для большей оптимизации кода вы можете также попробовать указать файл с правилами ‘proguard-android-optimize.txt’ вместо ‘proguard-android.txt’ :
Также вы можете переиспользовать ресурсы. Например, если вам необходимо два ресурса, отличающиеся только углом поворота. Возьмите только один из них и поверните на нужное количество градусов:
А еще вы можете уменьшить размер PNG ресурсов в папке res/drawable/, с помощью инструмента aapt:
Используйте векторные графические ресурсы, так как они значительно уменьшают размер графических ресурсов в APK. Однако помните, что большие векторные изображения требуют больше времени для отрисовки, поэтому обращайтесь к ним только для отображения небольших картинок.
Эффективное использование памяти
Для того чтобы приложение не упало по причине Out Of Memory, вы можете узнать какой размер heap для него доступен (memoryClass), а также является ли устройство с низким объемом RAM (1GB или меньше) (isLowRamDevice):
Узнать статус памяти можно с помощью:
Для контроля занимаемой памяти вы можете использовать Memory Profiling Tool in Android Studio. С помощью этого инструмента вы визуализируете происходящие процессы:
На рисунке мы видим, какой объем памяти занимают в приложении графические ресурсы (20.1 Mb). И, разумеется, хорошей практикой является использование изображений с низким разрешением.
Следующий момент. Очищайте память, когда графический интерфейс уходит с экрана или когда ее банально не хватает. Для этого переопределите метод onTrimMemory() интерфейса ComponentCallbacks2 и, в зависимости от типа события, вычищайте лишнее:
Метод onTrimMemory() вызывается, когда операционная система определила необходимость trim (обрезания) ненужной памяти одного из процессов. Например, когда процесс становится фоновым и для других фоновых процессов не хватает ресурсов.
Оптимизируйте использование батареи
Старайтесь ограничить операции, ведущие к быстрой разрядке устройства до тех пор, пока устройство не подключено к источнику питания. Вы можете узнать, когда устройство подключено к питанию и узнать уровень заряда батареи. Объявим в манифесте приложения BroadcastReciever:
Класс PowerReciever:
Также вы можете реагировать на уровень заряда батареи. Объявим в манифесте приложения:
Класс BatteryStateReciever:
Вы можете посмотреть, как приложение использует батарею с помощью Battery Historian:
Приложение должно быть быстрым и отзывчивым
Кроме того, отметим, что пользователь всегда нуждается в обратной связи — приложение должно отвечать на его действия. Что для этого нужно? При запуске приложения предоставляем placeholder или специальный экран загрузки. Таким образом, пользователь скоротает период ожидания. Мелочь, но это гораздо лучше, чем пялиться в пустой экран.
Это значит, что мы будем избегать пустых состояний и заполним экраны placeholder или изображениями. Однако не стоит забывать, что устройства с маленьким экраном имеют маленькие вычислительные ресурсы. И для увеличения производительности следует уменьшить использование объемных изображений и анимаций. Убедитесь, что частота обновления экрана 60 frames per second и используйте для этого средства профилирования Profile GPU Rendering.
Вывод
Выполнение рекомендаций, перечисленных в этой статье, позволяет создать приложение для Android Go, которое поможет пользователю сэкономить ресурсы (память, трафик, заряд батареи) и сделать опыт обращения с приложением приятным во всех смыслах.
Кроме того, наши советы способствуют повышению рейтинга приложения и удержанию аудитории. Ведь медленный и чересчур требовательный к ресурсам девайса продукт никому не нужен. Как правило, он удаляется после первого негативного опыта.