Pull to refresh

Новичок о переходе с iOS на Android

Reading time 2 min
Views 5.8K
Перевод этого поста в гуглоплюсе.

Купил себе Nexus S. Программировал под Андроид несколько последних дней. Android API требует, чтобы пользователи являлись очень хорошими программистами. Абстракции Андроида намного более наворочены (раздуты, навязаны, переусложнены), чем их эквиваленты в iOS. Между тем, “intents” просто замечательны, но только если въехать в них.

Простите, все что дальше — поток сознания. tl;dr



После пары дней программирования iOS у меня было работающее приложение. После пары дней Андроида я только-только начал понимать абстракции.

Похоже, разработчики Андроида хотели дать потребителю API (разработчикам приложений) свободу делать всё, что захочешь. Между тем, глубина знаний паттернов проектирования требуется так сильно и так бессмысленно, что большинство разработчиков приложений изучат только 50% необходимых для выполнения задачи вещей, и закончат простреливанием ноги, внезапно разрушив юзабилити в оставшихся 50%. iOS позволяет навести пушку на ногу, но и дает возможность никогда не нажимать курок.

Например, чтобы корректно реализовать асинхронный HTTP, на iOS и Android нужно пройти абсолютно разные испытания. На iOS можно использовать встроенные библиотеки, и если пользователь вдруг переключается между приложениями в момент запроса, можно быть уверенным, что имеешь до 30 секунд, обычно больше, чтобы закончить свои задачи до завершения приложения. На андроиде же нужно реализовать android app service, апи для всех важных сетевых вызовов. Приложение может быть убито в любое время, поэтому ты должен хранить все свои аргументы, и попробовать снова сделать вызов в случае, если оно действительно умрет.

Это называется «хорошей практикой» и, как утверждается, подходит для 99% случаев (хотя и с большим количеством ненужного кода и работы с твоей стороны). Решения в области дизайна становятся очевидными, как только понимаешь, что ограничения аппаратуры и провайдеров являются неотъемлемой частью андроида, между тем разработчикам приложений это доставляет мало радости. iOS поддерживает методы, которые также подходят к 95% случаев, но при этом требуют намного меньше усилий со стороны разработчика для создания правильно работающего приложения.

Разработчики iOS имеют доступ к отличной документации. В тех местах, где библиотека документации iOS/Cocoa/Core* обычно очень хороша, ведя разработчика в верном направлении, в сторону более простых абстракций, документация Андроида делает несколько предположений, она предполагает отличное знание паттернов разработки Java, и это в дополнение к собственным андроидовым паттернам. Например, вот: «android.content.ContentProvider» или «android.app.Service».

В разработке под Андроид есть огромный потенциал, и есть несколько действительно хороших приложений. Только я чувствую, что они не в этой области. Необходимо больше абстракций, чтобы мы (разработчики мобильных приложений) могли быстрее разбираться в вопросе, с 95% точностью. В данный момент, мы имеем API, позволяющее сделать идеальное приложение, но только если мы хотим инвестировать месяцы в исследование (анти?)паттернов проектирования под Андроид для того, чтобы наш первый REST-запрос отработал корректно. А еще можно быть специалистом в Computer Science — но ведь на самом деле не все мы пошли по этому пути. По факту, немногие из нас (обратите внимание на почти все отличные приложения под iOS).
Tags:
Hubs:
+42
Comments 68
Comments Comments 68

Articles