SlideShare a Scribd company logo
Android Best Practices
Будьте проще
- Старайтесь всегда выводить нужные ресурсы в
специальный для них раздел.
- К примеру текста в @string (R.string.) Это
поможет с редактированием текста в
дальнейшем и добавлением мультиязычности.
- @attr для конкретных визульных свойств для view
. . .
- Используйте SP и DP вместо пикселей. Иначе
поедет верстка на разных разрешениях
девайсов.
- Храните в Mipmaps иконки, а в Drawables все
остальное. Т.к. Андроид использует из
drawables только папку соответсвующей
текущему системному разрешению xxhdpi.
- Потому что система может затребовать иконки
более высокого разрешения, к примеру
лаунчер приложения, и как раз mipmap может
выдать а drawable нет
Избегайте множественного
наследования в xml
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<RelativeLayout
...
>
<LinearLayout
...
>
<LinearLayout
...
>
<LinearLayout
...
>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
</LinearLayout>
Используйте простые имена для
переменных и параметров.
<resources>
<!-- font sizes -->
<dimen name="font_larger">22sp</dimen>
<dimen name="font_large">18sp</dimen>
<dimen name="font_normal">15sp</dimen>
<dimen name="font_small">12sp</dimen>
<!-- typical spacing between two views -->
<dimen name="spacing_huge">40dp</dimen>
<dimen name="spacing_large">24dp</dimen>
<dimen name="spacing_normal">14dp</dimen>
<dimen name="spacing_small">10dp</dimen>
<dimen name="spacing_tiny">4dp</dimen>
<!-- typical sizes of views -->
<dimen name="button_height_tall">60dp</dimen>
<dimen name="button_height_normal">40dp</dimen>
<dimen name="button_height_short">32dp</dimen>
</resources>
Не стесняйтесь повторяться.
Bad 👎
<string name="network_error">Network error</string>
<string name="call_failed">Call failed</string>
<string name="map_failed">Map loading failed</string>
Good 👍
<string name="error_message_network">Network error</string>
<string name="error_message_call">Call failed</string>
<string name="error_message_map">Map loading failed</string>
И еще не записывайте текстовку капсом.
Капс можно после выставить параметром у TextView textAllCaps=true
Называйте цвета своими именами
Bad 👎
<resources>
<color name="button_foreground">#FFFFFF</color>
<color name="button_background">#2A91BD</color>
<color name="comment_background_inactive">#5F5F5F</color>
<color name="comment_background_active">#939393</color>
<color name="comment_foreground">#FFFFFF</color>
<color name="comment_foreground_important">#FF9D2F</color>
<color name="comment_shadow">#323232</color>
Good 👍
<resources>
<!-- grayscale -->
<color name="white" >#FFFFFF</color>
<color name="gray_light">#DBDBDB</color>
<color name="gray" >#939393</color>
<color name="gray_dark" >#5F5F5F</color>
<color name="black" >#323232</color>
<!-- basic colors -->
<color name="green">#27D34D</color>
<color name="blue">#2A91BD</color>
<color name="orange">#FF9D2F</color>
<color name="red">#FF432F</color>
</resources>
Старайтесь использовать styles
styles.xml
<style name="ContentText">
<item name="android:textSize">@dimen/font_normal</item>
<item name="android:textColor">@color/basic_black</item>
</style>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/price"
style="@style/ContentText"
/>
Будьте всегда в курсе
http://androidweekly.net/
http://digest.mbltdev.ru/
https://android.jlelse.eu/
Быть может кто то столкнулся с такой же проблемой и решил ее, или вы
решили и кому то может быть полезным.
Parcelable вместо Serialazable
Parcelable это инструмент Андроид. Когда Serialazable это Java.
Первый работает быстрее. Подробнее тут
Используем Context правильно.
Если вы используете его в Singleton то передавайте
ApplicationContext. Т.к. Используя context активити он может
привести к утечкам памяти, потому что GarbageCollector.
К примеру когда инициализируете библиотеку, то передавайте
ApplicationContext.
Можете использовать Context Активити когда надо связать обьект
с жизненным циклом активити.
В адаптерах вы можете обращаться к view.getContext. Такое
обычно нужно когда задаете цвета
Фрагменты или Активити
Чаще всего советуют использовать активити.
И использовать фрагменты лишь когда необходимо, например
когда надо показать два экрана в одном окне, как это делает
ViewPager.
Мои любимые библиотеки
Fresco, Glide - как они работают и зачем
Retrofit, OkHttp
com.github.ihsanbal:LoggingInterceptor - Выделение логов
респонса retrofit
Com.roughike:bottom-bar
Com.wdullaer:materialdatetimepicker
Crashlytics, Fabric
Ссылки
https://blog.mindorks.com/how-to-learn-android-
development-f33dd6dba40d
Базовые инструкции для новичка.
https://blog.mindorks.com/android-development-best-
practices-83c94b027fd3
И статья вдохновившая меня.

More Related Content

PPTX
Язык Html
Nick535
 
PDF
Android Development Course in HSE lecture #3
Empatika
 
PDF
Android - 10 - Graphics
Noveo
 
PPTX
Views обзор
Антон Звонов
 
PDF
Работа с графической подсистемой (Lecture 10 – Graphics)
Noveo
 
PDF
Material Design (Lecture 15 – material design)
Noveo
 
PDF
Введение в Android-разработку (Lecture 06 – basics)
Noveo
 
Язык Html
Nick535
 
Android Development Course in HSE lecture #3
Empatika
 
Android - 10 - Graphics
Noveo
 
Views обзор
Антон Звонов
 
Работа с графической подсистемой (Lecture 10 – Graphics)
Noveo
 
Material Design (Lecture 15 – material design)
Noveo
 
Введение в Android-разработку (Lecture 06 – basics)
Noveo
 

Similar to Android Best Practices (8)

PDF
Лекция Android. Fragments, ActionBar, Drawer
Александр Брич
 
PDF
Fragments, ActionBar, Drawer
Александр Брич
 
PDF
Android осень 2013 лекция 1
Technopark
 
PPTX
Создание графического интерфейса пользователя мобильных Android приложений (ч...
metaform
 
PDF
Android - 05 - Android basics
Noveo
 
PDF
Android: Как создать свое первое приложение?
Kuban Dzhakipov
 
ODP
Верстка для Андроид
Alexey Ustenko
 
PDF
Android - 07 - User Interface
Noveo
 
Лекция Android. Fragments, ActionBar, Drawer
Александр Брич
 
Fragments, ActionBar, Drawer
Александр Брич
 
Android осень 2013 лекция 1
Technopark
 
Создание графического интерфейса пользователя мобильных Android приложений (ч...
metaform
 
Android - 05 - Android basics
Noveo
 
Android: Как создать свое первое приложение?
Kuban Dzhakipov
 
Верстка для Андроид
Alexey Ustenko
 
Android - 07 - User Interface
Noveo
 
Ad

More from Mad Devs (20)

PPTX
Держите одеяло у себя: как общаться с кандидатом и узнавать все, что вам инте...
Mad Devs
 
PPTX
Дружелюбнй онбординг: как с увеличением количества не потерять качество
Mad Devs
 
PPTX
Mad Stream: Software Architecture 101.
Mad Devs
 
PPTX
Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.
Mad Devs
 
PDF
Mad Stream - 7 habits of highly awesome developers. Speaker - Anatoliy Fedorenko
Mad Devs
 
PDF
Mad Stream: "Что можно напечатать на 3d принтере, помимо еще одного 3d принте...
Mad Devs
 
PDF
Maв Stream: "Факт карты на службек у ПМа", спикер – Дмитрий Кононенко
Mad Devs
 
PDF
Лайфхаки менеджмента на удаленке от Дмитрия Кононенко
Mad Devs
 
PDF
Mad Talks. Astashov_splitbrain
Mad Devs
 
PPTX
Flutter vs Native App Development
Mad Devs
 
PDF
Mad Talks. Marketing tips for tech companies
Mad Devs
 
PDF
The paradox of choice in design
Mad Devs
 
PDF
Git and Github for Beginners
Mad Devs
 
PDF
How to hire freelancers
Mad Devs
 
PDF
Ethereum blockchain
Mad Devs
 
PDF
"Outside In". Web application testing.
Mad Devs
 
PDF
Asynchrony in python exists and why should you use it
Mad Devs
 
PDF
Ethereum: аспекты разработки смарт-контрактов
Mad Devs
 
PDF
Why we sleep. Michael Ivashenko
Mad Devs
 
PDF
Удаленное управление приложением и его аналитика
Mad Devs
 
Держите одеяло у себя: как общаться с кандидатом и узнавать все, что вам инте...
Mad Devs
 
Дружелюбнй онбординг: как с увеличением количества не потерять качество
Mad Devs
 
Mad Stream: Software Architecture 101.
Mad Devs
 
Mad Stream: Соло-прокачка мобильного разработчика. Спикер - Айбек Ногоев.
Mad Devs
 
Mad Stream - 7 habits of highly awesome developers. Speaker - Anatoliy Fedorenko
Mad Devs
 
Mad Stream: "Что можно напечатать на 3d принтере, помимо еще одного 3d принте...
Mad Devs
 
Maв Stream: "Факт карты на службек у ПМа", спикер – Дмитрий Кононенко
Mad Devs
 
Лайфхаки менеджмента на удаленке от Дмитрия Кононенко
Mad Devs
 
Mad Talks. Astashov_splitbrain
Mad Devs
 
Flutter vs Native App Development
Mad Devs
 
Mad Talks. Marketing tips for tech companies
Mad Devs
 
The paradox of choice in design
Mad Devs
 
Git and Github for Beginners
Mad Devs
 
How to hire freelancers
Mad Devs
 
Ethereum blockchain
Mad Devs
 
"Outside In". Web application testing.
Mad Devs
 
Asynchrony in python exists and why should you use it
Mad Devs
 
Ethereum: аспекты разработки смарт-контрактов
Mad Devs
 
Why we sleep. Michael Ivashenko
Mad Devs
 
Удаленное управление приложением и его аналитика
Mad Devs
 
Ad

Android Best Practices

  • 3. - Старайтесь всегда выводить нужные ресурсы в специальный для них раздел. - К примеру текста в @string (R.string.) Это поможет с редактированием текста в дальнейшем и добавлением мультиязычности. - @attr для конкретных визульных свойств для view . . .
  • 4. - Используйте SP и DP вместо пикселей. Иначе поедет верстка на разных разрешениях девайсов. - Храните в Mipmaps иконки, а в Drawables все остальное. Т.к. Андроид использует из drawables только папку соответсвующей текущему системному разрешению xxhdpi. - Потому что система может затребовать иконки более высокого разрешения, к примеру лаунчер приложения, и как раз mipmap может выдать а drawable нет
  • 5. Избегайте множественного наследования в xml <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <RelativeLayout ... > <LinearLayout ... > <LinearLayout ... > <LinearLayout ... > </LinearLayout> </LinearLayout> </LinearLayout> </RelativeLayout> </LinearLayout>
  • 6. Используйте простые имена для переменных и параметров. <resources> <!-- font sizes --> <dimen name="font_larger">22sp</dimen> <dimen name="font_large">18sp</dimen> <dimen name="font_normal">15sp</dimen> <dimen name="font_small">12sp</dimen> <!-- typical spacing between two views --> <dimen name="spacing_huge">40dp</dimen> <dimen name="spacing_large">24dp</dimen> <dimen name="spacing_normal">14dp</dimen> <dimen name="spacing_small">10dp</dimen> <dimen name="spacing_tiny">4dp</dimen> <!-- typical sizes of views --> <dimen name="button_height_tall">60dp</dimen> <dimen name="button_height_normal">40dp</dimen> <dimen name="button_height_short">32dp</dimen> </resources>
  • 7. Не стесняйтесь повторяться. Bad 👎 <string name="network_error">Network error</string> <string name="call_failed">Call failed</string> <string name="map_failed">Map loading failed</string> Good 👍 <string name="error_message_network">Network error</string> <string name="error_message_call">Call failed</string> <string name="error_message_map">Map loading failed</string> И еще не записывайте текстовку капсом. Капс можно после выставить параметром у TextView textAllCaps=true
  • 8. Называйте цвета своими именами Bad 👎 <resources> <color name="button_foreground">#FFFFFF</color> <color name="button_background">#2A91BD</color> <color name="comment_background_inactive">#5F5F5F</color> <color name="comment_background_active">#939393</color> <color name="comment_foreground">#FFFFFF</color> <color name="comment_foreground_important">#FF9D2F</color> <color name="comment_shadow">#323232</color> Good 👍 <resources> <!-- grayscale --> <color name="white" >#FFFFFF</color> <color name="gray_light">#DBDBDB</color> <color name="gray" >#939393</color> <color name="gray_dark" >#5F5F5F</color> <color name="black" >#323232</color> <!-- basic colors --> <color name="green">#27D34D</color> <color name="blue">#2A91BD</color> <color name="orange">#FF9D2F</color> <color name="red">#FF432F</color> </resources>
  • 9. Старайтесь использовать styles styles.xml <style name="ContentText"> <item name="android:textSize">@dimen/font_normal</item> <item name="android:textColor">@color/basic_black</item> </style> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/price" style="@style/ContentText" />
  • 10. Будьте всегда в курсе http://androidweekly.net/ http://digest.mbltdev.ru/ https://android.jlelse.eu/ Быть может кто то столкнулся с такой же проблемой и решил ее, или вы решили и кому то может быть полезным.
  • 11. Parcelable вместо Serialazable Parcelable это инструмент Андроид. Когда Serialazable это Java. Первый работает быстрее. Подробнее тут
  • 12. Используем Context правильно. Если вы используете его в Singleton то передавайте ApplicationContext. Т.к. Используя context активити он может привести к утечкам памяти, потому что GarbageCollector. К примеру когда инициализируете библиотеку, то передавайте ApplicationContext. Можете использовать Context Активити когда надо связать обьект с жизненным циклом активити. В адаптерах вы можете обращаться к view.getContext. Такое обычно нужно когда задаете цвета
  • 13. Фрагменты или Активити Чаще всего советуют использовать активити. И использовать фрагменты лишь когда необходимо, например когда надо показать два экрана в одном окне, как это делает ViewPager.
  • 14. Мои любимые библиотеки Fresco, Glide - как они работают и зачем Retrofit, OkHttp com.github.ihsanbal:LoggingInterceptor - Выделение логов респонса retrofit Com.roughike:bottom-bar Com.wdullaer:materialdatetimepicker Crashlytics, Fabric
  • 15. Ссылки https://blog.mindorks.com/how-to-learn-android- development-f33dd6dba40d Базовые инструкции для новичка. https://blog.mindorks.com/android-development-best- practices-83c94b027fd3 И статья вдохновившая меня.