Знаете ли вы, что в Google Play Store выставлено на продажу 2,89 млн приложений, а в App Store  —  около 1,98 млн? Но только некоторым из них удалось завоевать рынок.

А задумывались ли вы когда-нибудь, почему одни приложения становятся успешнее других, хотя не очень-то отличаются от своих незадачливых конкурентов?

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

Поговорим о 10 основных недоработках, которые не позволяют Android-приложениям становиться хитами продаж. Если вам удастся благополучно избежать их, то вы сможете рассчитывать на прибыль, достойную вашего нелегкого труда.

1. Поспешное написание кода

  • Прежде чем написать какую-нибудь функцию для приложения, проведите мозговой штурм.
  • Чтобы создать высококачественный контент или код без ошибок, всегда следуйте алгоритму: подумать → исследовать → спланировать → написать → подтвердить → модифицировать → написать код.
  • Продолжайте мозговой штурм до тех пор, пока не решите, что достаточно продумали и спланировали функцию. Только тогда переходите к коду. Придерживаясь этой методики, вы сэкономите силы и напишете код с минимумом ошибок.
  • Будьте предусмотрительны: не беритесь сразу за несколько функций. Спланируйте сначала одну и постарайтесь ее реализовать.
  • Совершенствуйте навыки поиска в Google, чтобы тщательно исследовать функцию и выработать системный подход к решению проблем, с которыми можно столкнуться при ее реализации. Найдя решение, не приступайте сразу копировать и вставлять код, попытайтесь сперва понять концепцию, лежащую в его основе.
  • Снова и снова задавайтесь вопросом, работает ли написанный вами код и можно ли его улучшить. Новички обычно довольны быстро написанным кодом, так как он, похоже, работает. Усвоив однажды эту порочную практику, они не могут совладать с соблазном использовать ее в последующих проектах.

2. Неупорядоченный код

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

Организация кода  —  это то же самое, что наведение порядка в комнате. Конечно, можно не делать ежедневной уборки независимо от того, насколько грязно вокруг. Но мириться с беспорядком получится лишь до того момента, пока не понадобится найти вещь, которая давно не попадалась на глаза.

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

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

3. Неосведомленность о возможностях Android Studio

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

Android Studio  —  среда разработки с множеством полезных функций. Например:

  • редактор визуальной разметки (Visual Layout Editor);
  • быстродействующий эмулятор (Fast Emulator);
  • удобные ярлыки;
  • шаблоны для добавления новых действий;
  • заранее определенные структуры проектов;
  • плагины генератора кода.

Кроме того, Android Studio предлагает поддержку Kotlin, мощного языка для Android-проектов, а также калибровку мониторов для развертывания эффективных переходов и анимации.

Android Studio помогает легко и эффективно подключаться к облачной базе данных Firebase.

Чтобы разработчики могли использовать сторонние библиотеки при создании своих приложений, Android Studio предоставляет поддержку gradle и maven.

Чтобы создавать надежные Android-приложения как в одиночку, так и в команде, важно уметь пользоваться Android Studio и другими инструментами, такими как Github.

4. Излишнее усложнение пользовательского интерфейса

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

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

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

5. Интеграция большого объема функций

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

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

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

6. Ожидание завершения сетевого запроса

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

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

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

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

Заставлять пользователя ждать без необходимости  —  не лучший подход в современной разработке приложений. Люди не хотят ждать. Такой пользовательский интерфейс может сократить количество скачиваний.

7. Отсутствие обработки ошибок и сбоев в работе Сети

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

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

Еще одна веская причина необходимости обработки ошибок  —  это безопасность! Некоторые ошибки, если не будут обработаны должным образом, могут привести к тому, что программа и базовая операционная система окажутся в уязвимом состоянии.

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

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

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

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

8. Отказ от Kotlin-сопрограмм

Kotlin был представлен Google как самый популярный, мощный и рекомендуемый язык для разработки Android-приложений.

Огромным преимуществом этого языка являются Kotlin-сопрограммы. Они позволяют выполнять длительные и трудоемкие задачи в фоновом/рабочем потоке, чтобы снизить нагрузку на главный.

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

Чтобы приложение оставалось отзывчивым и работало бесперебойно, рекомендуется освободить главный поток. Этого легко достичь с помощью Kotlin-сопрограммы.

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

9. Недоработанные UI/UX

Это не ошибка, а просто упущение с точки зрения удобства для пользователя. Как уже было сказано, приложения для Android с отличным интерфейсом пользуются наибольшей популярностью. Поэтому настоятельно рекомендуется улучшать его.

Моменты, которые следует учитывать при улучшении UI/UX

  • Обработка растровых изображений

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

Предположим, у вас есть изображение размером 4000 X 3000 пикселей (потребляющее около 4 байта * 4000 * 3000 = 45,7 МБ). Это слишком много памяти (45,7 МБ ОП) для одного изображения!

Теперь посмотрим на эту проблему с точки зрения разрешения экрана. Для демонстрации изображения размером 4000 X 3000 на экране с разрешением 1920 X 1080 пикселей потребуется всего 4 байта * 1920 * 1080 = 7.9 МБ.

Для выполнения вышеуказанной задачи необходимо:

  1. Измерить видовую конфигурацию, в которой будет демонстрироваться изображение.
  2. Соответствующим образом масштабировать/обрезать слишком большое изображение.
  3. Отобразить масштабированное/обрезанное изображение.
  • Использование фрагментов

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

Чтобы исправить, Android представил Фрагменты (Fragments) в Honeycomb. Если представить фрагменты как отдельные строительные блоки с собственными жизненными циклами внутри задачи, то становится ясно, что она может управляться своей родительской задачей и применяться повторно.

Фрагменты также полезны, когда вы разрабатываете приложение, подходящее как для телефонов, так и для планшетов.

  • Использование динамики, растровых изображений и анимации

Растровые изображения, движущиеся картинки и анимация играют жизненно важную роль, когда речь заходит о привлекательном и информативном UI с точки зрения пользователя.

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

10. Неэффективное тестирование приложения

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

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

Кроме того, если приложение должным образом организовано и протестировано, то в будущем в него можно легко добавлять новые функции, поскольку удаление или редактирование старого кода напрягает многих разработчиков.

Что следует учитывать при тестировании

  • Не проверяйте приложение только на одном устройстве, это может привести к проблемам после представления продукта публике. Некоторые функции могут работать бесперебойно на одном устройстве, но на другом перестанут отвечать на запросы. Поэтому тестируйте приложение на нескольких устройствах (как можно большем количестве).
  • Тестируйте приложение на устройствах с низким объемом памяти, различными разрешениями экрана, более старыми версиями ОС. Используя эту практику, вы сможете точнее обнаруживать ошибки как в функционале приложения, так и в пользовательском интерфейсе.
  • Протестируйте более тщательно функции, которые отвечают за сетевой запрос (например, при отключении или ослаблении подключения к интернету), чтобы обеспечить эффективную обработку сетевых сбоев.
  • Протестируйте как можно более тщательно приложение перед его поставкой пользователю.

Итоги

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

Читайте также:

Читайте нас в Telegram, VK и Дзен


Перевод статьи Hrithik Sharma: Some Common and Silly Mistakes while building an Android app

Предыдущая статья10 полезных команд для командной строки и консоли
Следующая статьяWebAssembly на Golang с нуля