31 метод эффективного программирования под Android

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



1. Не забывайте освобождать ресурсы после использования: многие ресурсы, такие как курсоры баз данных часто игнорируют. Освобождайте их. Закрывайте ресурсы (файлы, потоки) после того, как они больше вам не нужны.
2. Не используйте «магические» числа: записи вида values[0] — бессмысленны. Существуют элегантные способы доступа, такие как values[SensorManager.DATA_X].
3. Используйте методы onPause()/onResume() для сохранения или закрытия всего того, что этого требует или того, что не должно быть открыто все время.
4. Создавайте ваши приложения работающими быстро и эффективно: обязательно изучитите доклады конференции Google I/O 2009.
5. Сложите два числа: ваше первое самостоятельное приложение должно брать два числа и складывать их. Это звучит очень просто, но вы можете потратить несколько часов для того, что бы вся разметка (здесь и далее layout), функции обратного вызова, методы onPause()/onResume() работали корректно.
6. Это Java: большая часть разработки приложения под Android – это программирование на Java. Не тратьте время на критику или ее восхваление. Просто программируйте.
7. Любите RelativeLayout: большинство примеров для начинающих используют LinearLayout, но вскоре вы узнаете, что RelativeLayout действительно полезен.
8. Используйте свойство «fill_parent» для самого первого RelativeLayout: наиболее общей и трудно находимой проблемой является использование свойства «wrap_content» для самого первого RelativeLayout и дальнейших выяснений причин того, почему же некоторые элементы прорисовываются странно.
9. Используйте «пустые» элементы разметки: часто вы будете использовать пустые элементы в вашей разметке для относительного позиционирования других элементов. Например, вы можете использовать пустой TextField с нулевой высотой и шириной с параметром «centerInParent» равным «true» только для того, что бы выравнять другие элементы по центру экрана.
10. Используйте цвет фона для разметки: если у вас есть некоторые проблемы с разметкой — попытайтесь установить цвет фона для некоторых объектов. Это поможет выделить ваши ошибки быстрее, чем другие утилиты.
11. Скачайте «Apps-For-Android»: они содержат достаточно много полезного исходного кода. И приятно дополняют стандартные примеры приложений и показывают использование других решений в коде. Скачайте их при помощи команды «svn co apps-for-android.googlecode.com/svn/trunk/apps-for-android-read-only».
12. Скачайте исходный код: исходный Android код необходим для решения некоторых проблем и восполнения пробелов в документации. Не обязательно, что бы это была последняя версия. Посетите соответствующий сайт для его получения.
13. Учитесь искать соответствующий исходный код: самое быстрое решение для большинства проблем — это найти как используется определенный параметр в другом исходном коде. Поместите копию примеров приложений, приложений «apps-for-android» и любых других исходных кодов в одну директорию. При помощи команды «grep -ir параметр директория_с_исходным_кодом/» или любой другой программы вы легко сможете найти как нужно использовать данный параметр.
14. Используйте Eclipse: даже если у вас есть другая любимая IDE или редактор, который вы используете годами, применяйте Eclipse для разработки под Android. Это достаточно хорошая IDE и для нее существует множество утилит помогающих разработчику.
15. Изучите Eclipse: изучайте несколько новых трюков этой IDE каждый день. Мои любимые можно найти здесь и здесь.
16. Программируйте каждый день: программирование под Android может вас разочаровать. Не позволяйте себе останавливаться. Используйте утилиты, примеры приложений, читайте статьи. И снова пишите код.
17. Не используйте один монитор: работа за ноутбуком в кафе замедлит вашу работу. Вам необходимо «разложить» окна приложений хотя бы на пару экранов (окно Eclipse, эмулятор и документация). Работать с тремя мониторами даже еще лучше.
18. Отформатируйте XML-файлы: используйте команду Source – Format для приведения их в приемлемый вид. Если вы захотите выбрать следующий параметр «Eclipse/Windows/Preferences/XML/XML Files/Editor/Formatting/Split XML attributes each on a new line», то нажмите Ctrl + Shift + F для форматирования текста.
19. Редактируйте XML-файлы простым текстовым редактором: не используйте GUI для изменений свойств XML-тэгов.
20. Думайте о пиратстве в MarketPlace: Google не сделал MarketPlace «счастливым местом». Приложения копируются и публикуются заново, но меняются только имена. Не планируйте жить исключительно на поступления из AppStore.
21. Используйте LogCat: часто бывает сложно понять, что же пошло не так. Запустите приложение в отладчике и посмотрите на вывод LogCat. Если вам необходимо раскрасить вывод LogCat используйте Colored LogCat
22. Исследуйте директорию SDK с утилитами: существует много полезных утилит, таких как hierarchyviewer или layoutopt. Изучите их.
23. Обязательно прочтите следующие статьи: дизайн и производительность в Android, лучшие практики пользовательских интерфейсов, лучшие практики «отзывчивых» пользовательских интерфейсов и лучшие практики unit-тестов Android приложений.
24. Не копируйте образцы пользовательских интерфейсов с других платформ (особенно с iPhone): я видел много приложений, которые пытаются копировать «tab bar», который есть у многих приложений на iPhone (android и iPhone). Я против этого. Это смотрится не к месту, не естественно для платформы и засоряет экран. Также, это трудно реализовать, так как SDK никак не помогает в создании этого и вам придется писать это с нуля. Вместо этого, используйте кнопку Menu.
25. Запуск намерений (Intents): всегда запускайте намерения при помощи отдельного метода и называйте этот метод соответствующим образом.
26. Сборщик мусора: запуск сборщика мусора виртуальной машины Dalvik очень «дорог». Он легко может заблокировать пользовательский интерфейс. Если вам необходим плавный скорллинг, вы должны избегать создания множества объектов. Предпочтительно использовать существующие объекты и не создавать новых. Игра Replica Island — это игра с исходным кодом, которая использует этот прием. Исследуйте ее исходные коды. Также вы сможете анализировать создание объектов в приложении на закладке «Allocation Tracker» в DDMS.
27. Потоки: запуск нового потока достаточно «дорог». Используйте только один поток, который выполняет задачи одна за одной или используйте пулы потоков (thread pools). Если необходимо, используйте встроенные классы, такие как AsyncTask.
28. Большие объемы данных: если ваши данные занимают достаточно большой объем (более 100Кб) — не сохраняйте их в текстовых или XML-файлах. Их парсинг будет слишком «дорог». Используйте SQLite.
29. Eclipse MAT: Eclipse Memory Analyzer это хорошая утилита для анализа выделений памяти. Она поможет вам найти утечки памяти в вашем приложении.
30. Метод onDestroy: переопределяйте метод onDestroy для того, что бы «убрать за собой».
31. Антивирус: если вы пользуетесь антивирусом, то исключите директории, где расположен эмулятор из сканирования: образы эмуляторов обычно хранятся в пользовательской директории (например, C:\Documents and Settings\Users.android), директорию Eclipse и директорию, где расположен Android SDK. Если вы отключите сканирование этих директорий скорость программирования и отладки может значительно возрасти.
Поделиться публикацией
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама
Комментарии 65
  • –16
    А теперь скажите мне, сколько из прочитавших все эти 31 пункт запомнили хотя бы 10 и будут использовать? Лучше бы взяли один из пунктов и подробно всесторонне рассмотрели, больше пользы было бы.
    Извините, конечно, но ценность этого поста стремится к нулю.
    • +6
      На вкус и цвет фломастеры разные. А если тяжело запомнить, всегда можно распечатать и держать в поле зрения. Плюсанул, мне материал понравился, спасибо.
      • +1
        Оптимизация и безопасность, это инь и янь нашей профессии, кому нужно — запомнит, или заложит в любимые закладки ;)
        • +2
          пункты то в основном краткие рекомендации. любой более менее опытный разработчик и так знает о большинстве описанных пунктов
          • +2
            Если вам нужно это запоминать и вы этого еще сами не понимаете, то вы посредственный программист :)
          • 0
            Почти всё новое — это хорошо забытое старое. Всегда полезно вспомнить о простых вещах, так как именно простое часто забывают и начинают излишне изобретать велосипед. Особенно когда начинаешь.
          • НЛО прилетело и опубликовало эту надпись здесь
          • –4
            14. Используйте Eclipse: даже если у вас есть другая любимая IDE или редактор, который вы используете годами, применяйте Eclipse для разработки под Android. Это достаточно хорошая IDE и для нее существует множество утилит помогающих разработчику.

            19. Редактируйте XML-файлы простым текстовым редактором: не используйте GUI для изменений свойств XML-тэгов.

            Взаимоисключающие параграфы?
            • 0
              имелось ввиду редактировать разметку не в UI builderе, который поставляется вместе с ADT плагином, а напрямую в xml редакторе
              • –2
                Понятное дело, а какой тогда смысл «Используйте Eclipse: даже если у вас есть другая любимая IDE или редактор»?
                • +1
                  в эклипс какбе есть тоже обычный редактор текста, в котором можно править XML без GUI.
                  • –7
                    Чё, риальне?
                    Тоесть он ничем не отличается от других редакторов. Почему же тогда «Используйте Eclipse: даже если у вас есть другая любимая IDE или редактор»?
                    • 0
                      eclipse используется вообще-то не только для редактирования XML-файлов, пункты 14 и 19 вообще-то не вытекают один из другого. Если вы программировали для Android под эклипс, то наверняка видели, что в нем есть возможность редактирования XML-файлов в GUI по принципу конструктора, просто собирая Layoutы из предложенных «деталей», задавая все параметры там же. Автор рекомендует не делать этого. Как-то так.
              • +10
                14. Используйте Eclipse

                Да это просто призыв к холивару в комментах :)

                А если серьезно, то пробовал использовать для разработки 3 разных популярных IDE и не отметил за эклипсом каких-то явных преимуществ.
                • +7
                  Преимущество Eclipse по моему только в интеграции всех инструментов в один. Хотя у него самый продвинутый визуальный редактор интерфейса, что не так критично для меня. Пользуюсь IntelliJ IDEA просто потому что удобнее и быстрее эклипса.
                  • +6
                    А у меня Eclipse безбожно тормозит, а потом я открыл для себя IntelliJ IDEA! Лично для меня — это лучшая ide для разработки под android.
                    • +1
                      Я может быть что-то делал не так, но нормально пользоваться визуальным редактором у меня так и не получилось. У меня не получалось ни с нуля вставить туда то, что нужно и как нужно, ни посмотреть руками написанные layouts — всегда черный экран, хоть ты тресни. Кроме того, для лучшего понимания, что и как происходит, лучше самому копаться в XML.
                      • –1
                        В том-то и суть, что опытные программисты все это знают и так, а новички в такой форме не усвоят.
                        • 0
                          JFYI: в 11-й версии IDEA, которая сейчас уже в статусе «beta», есть визуальный редактор layout для android
                          • +1
                            Это не редактор, это просто превью, постепенно допиливается и уже сейчас можно пользоваться, что бы получить представление о том, как будет выглядеть layout
                        • 0
                          Визуальный редактор бывает полезен для быстрой проверки результата. Для удобного редактирования layout он совершенно бесполезен (ИМХО). Из удачных реализаций WYSIWYG редакторов gui основанных на xml встречал разве что .NET WPF. Да и то там часто ковыряться ручками приходится.

                          Кстати, слышал что в плагине для новой IJIdea будет просмоторщик.
                          • 0
                            Да, просмотрщик есть в Idea EAP
                  • +2
                    MAT отличная штуковина. Для ознакомления советую посмотреть видео www.youtube.com/watch?v=_CruQY55HOk с Google I/O 2011.
                    • НЛО прилетело и опубликовало эту надпись здесь
                    • +3
                      Мне советы впринципе все понравились, кроме:

                      16. Программируйте каждый день: программирование под Android может вас разочаровать. Не позволяйте себе останавливаться. Используйте утилиты, примеры приложений, читайте статьи. И снова пишите код.
                      ___
                      Я не знаю как считают другие, но данный совет эффективному программированию не способствует, ни только для android, но и вообще, ИМХО. Это уже называется задротсвто, как в играх.
                      • 0
                        Я думаю что здесь можно указать какие-то сроки. Автор, я думаю, надеялся этим сказать — пытайся, а вдруг попрет?
                      • +2
                        Кстати, кто-нибудь может привести реальные примеры пункта 20?
                        • +3
                          Вот пример моей проги например — market.android.com/details?id=jqsoft.apps.tiedeluxe

                          Китайцы без проса взяли полностью прогу и перевели на китайский и запустили у себя — www.oooapp.com/android/24159.html
                          • 0
                            Во дела! С китайцами ухо востро держать надо. А вообще — лучше самому перевести описание программы и название на разные языки, ощутимо прибавит популрности программе.
                            • 0
                              Я так и делаю ))) На эту штуку нечайно наткнулся, иногда просматриваю новые обзоры через поиск Google
                            • 0
                              ну я так понял это они в своем магазине запустили, в гугл маркет-то наверное можно написать, и если что — они клона наверное уберут
                              • +2
                                Ну давай пример другой своей проги )) Вот мое market.android.com/details?id=jqsoft.apps.mysettings, а это клон, я жаловался до сих пор не удалили, стырил все мои иноки market.android.com/details?id=com.rgyani.androsettings&feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5yZ3lhbmkuYW5kcm9zZXR0aW5ncyJd
                                • 0
                                  Иконки да — украли, но я так понял, само приложение другое, и подписано другим разработчиком,
                                  + приложение судя по всему глючит и популярность у него намного ниже
                                  • 0
                                    да приложение другое, но тут суть в другом, гугл почти не следит, иконки то я сам рисовал, то бишь они должны были убрать, а не убрали. да приложение там глючит, но все равно это не важно. главное факт копирования ) на галстуках конечно лучше пример. но пиратство реально процветает.
                          • +2
                            А у меня отлично функционирует NetBeans, всем доволен, Eclipse не хочу.
                            В целом же, довольно банальный список, можно смело убрать слово «Андроид» в большинстве пунктов.
                            • +1
                              Не знаю, как у Идеи, а у Netbeans есть одна прекрасная плюшка: он в проектах под андроид не создаёт лишних IDE-специфичных файлов, а использует стандартный проект, создаваемый Android SDK.
                              Т.е. проект можно перекинуть куда угодно и собрать простым антом, чего Eclipse, насколько я знаю, не позволяет.
                              • +2
                                чего Eclipse, насколько я знаю, не позволяет.

                                Это не совсем так. Да, и Eclipse и Idea имеют свои проектные файлы, но при этом никто не мешает поддерживать build.xml и собирать проект антом, тем более что его в итоге при релизе все равно придется собирать антом.

                                Не видел в eclipse но в Idea есть панель ант задач, в которой удобно запускать билды.
                                • 0
                                  Kent44, расскажите кофейнику, почему для финальной сборки надо использовать именно ant, а не пользоваться стандартными средствами eclipse?
                                  • +1
                                    Ну хотя бы ради обфускации включенной в дефолтном build.xml. Еще можно указать в файле пропертей путь к ключу разработчика и тогда подписка приложения будет происходить автоматически во время сборки. Попросят только ввести пароль. О последнем гугл предупреждает что это не очень секурно, т.к. он может сохраниться в истории баша. Но это если запускать ant через консоль.

                                    Возможно все это настраивается в билде Eclipse, я просто не изучал. ИМХО, сборка проекта не должна зависеть от среды разработки, особенно при командной работе. Конечно желательно всем в команде пользоваться одним инструментом, но это скорее нужно для более простой коммуникации. Сборка может происходить и в автоматическом режиме.
                                • 0
                                  еще в эклипсе есть export ant
                                  • 0
                                    ant-build можно создать средствами SDK, команда android update project
                                • +2
                                  9. Используйте «пустые» элементы разметки: часто вы будете использовать пустые элементы в вашей разметке для относительного позиционирования других элементов. Например, вы можете использовать пустой TextField с нулевой высотой и шириной с параметром «centerInParent» равным «true» только для того, что бы выравнять другие элементы по центру экрана.

                                  Фи. (смайл)
                                  Как там — 6. Это Java: большая часть разработки приложения под Android – это программирование на Java. Не тратьте время на критику или ее восхваление. Просто программируйте.


                                  А статья хорошая.

                                  • +1
                                    Положим, по центру экрана нужно разместить две иконки: одну чуть выше центра, другую чуть ниже. Если вы знаете способ, как это сделать без пустого элемента с centerInParent, — поделитесь, пожалуйста.
                                    • 0
                                      А если иконку поместить во FrameLayout и указать ему нужный padding, это сработает?
                                      • +4
                                        Если правильно понял задачу, то как-то так (извиняюсь, пользоватся тегам не могу):
                                        gist.github.com/1388323

                                        • 0
                                          Действительно, спасибо!
                                        • +1
                                          Нет, не знаю.
                                          В данном случае обратила на себя внимание легитимация очевидного костыля, потому следом и приведена цитата о Джаве. (смайл)
                                      • +1
                                        24. Не совсем согласен с «Вместо tab bar, используйте кнопку Menu». Если понятно, что переходы через меню будут частыми, то меню — это лишний «клик» для пользователя, плюс элементов меню сразу не видно, то есть вы сознательно прячете для пользователя элементы навигации. С другой стороны, для таких вещей как Settings, меню — самое место, не мозолит глаз и используется редко. Хороший пример это Foursquare для андроида.

                                        28. Если есть достаточно большой объем редко изменяемых данных, может подойти protobuffer. Он очень компактен и быстро парсится в Java объекты, это гораздо удобнее громоздкого SQLite.

                                        «20. Думайте о пиратстве в MarketPlace» — ценный совет, я как-то даже не думал об этом, надо исследовать вопрос :)
                                        • 0
                                          Там особо исследовать нечего — при желании можно взять любое приложение, разобрать, собрать (возможно с новыми ресурсами и некоторыми подмененными классами), переподписать и выложить в маркет.
                                        • 0
                                          Все хорошо, но с советом про пустые TextFieldы категорически не согласен. Выравнивать элементы по центру экрана можно и менее костыльным способом, а такие пустые элементы только ухудшают читаемость layout'a.
                                          • +1
                                            Неужели без 9ого пункта не обойтись? По-моему наличие элементов, выполняющих несвойственную им функцию(невидимое текстовое поле для верстки, а не для ввода текста), будет сильно ухудшать читаемость.
                                            • 0
                                              п.11 — парсер лох.
                                              svn checkout http:// apps-for-android.googlecode.com/svn/trunk/ apps-for-android-read-only

                                              без пробела после //
                                              • +1
                                                У вас заголовок неправильный. Вы перечислили советы, а не методы. Метод — это способ достижения результата.
                                                • 0
                                                  Про антивирус и пиратство порадовало)
                                                  • +2
                                                    Не используйте один монитор
                                                    Используйте Eclipse
                                                    Очень правильная мысль! Сейчас занимаюсь кроссплатформенной разработкой (я пишу под виндой в Qt creator, еще 2 разраба пишут под линуксом в Qt и еще 1 пишет под линуксом в Эклипсе). ОЧЕНЬ неудобно обходиться одним монитором. Постоянно хочется окно приложения видеть рядом с кодом, а не поверх. Так еще и Qt в части интерфейсов не очень удобен. На моей рабоче вайдовой 19хе приходится делать уйму лишних телодвижений, особенно при использовании встроенной справки, которую хочется открыть вообще на третьем мониторе.
                                                    • 0
                                                      А я что-то не уловил выгоды в 19 пункте. В чем я выигрываю в ручном редактировании XML-тэгов?
                                                      • 0
                                                        «20. Думайте о пиратстве в MarketPlace»

                                                        и в AppStore тоже думайте
                                                        • 0
                                                          Около половины пунктов можно заменить на один. Остальные — больше констатация собственного опыта, нежели полезный совет начинающему. Но это ведь перевод, так что претензии к автору топика едва ли уместны.
                                                          • 0
                                                            17. Не используйте один монитор Полностью согласен! На работе сейчас 2 монитора очень не хватает еще парочки. Дома пока один и прям не возможно нормально работать.

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