Открывали конференцию сотрудники Google — \Чет Хааз\ (Chet Haase), ведущий разработчик Android UI Toolkit и \Роман Ги\ (Romain Guy), ведущий разработчик некоего секретного проекта. Началось всё с красивой статистики тех версий Android, которые в России еще не так распространены: у Android Wear уже 4000 приложений и 1500 циферблатов для часов, Android TV выпускаются такими производителями, как Sony, Sharp, nVidia и Razer, а Android Auto устанавливают в свои автомобили Audi, GM, Ford, VW. Кстати, Android Auto теперь доступен в России официально.\
\r\n\\r\n\t\\r\n\\\50 000 000 000\ — столько Android приложений устанавливается в год\\
\r\n\
Также они ещё раз напомнили, что вышла бета-версия \Android N\, которую можно установить на некоторые модели Nexus. Показали основные фишки новой версии: это режим мультиоконности, когда два приложения запущены на половинках экрана, режим «картинка-в-картинке», и можно смотреть видео, параллельно работая с другим приложением, а также режим «Drag-n-Drop». Если первые два уже реализованы и в Android, и в Windows Mobile, то Drag-n-Drop — это существенное отличие, упрощающее работу с системой. Теперь при поддержке приложением данной функции можно будет просто перетягивать файлы из одного приложения в другое, чтобы последнее их открыло.\
\r\n\\\
\r\n\\\
\r\n\\\
\r\n\\(Источник: developer.android.com)\\
\r\n\В новой версии появятся новые шаблоны для нотификаций, появится одновременная поддержка нескольких локалей, еще лучше будет работать режим энергосбережения Doze. Для разработчиков представили поддержку масштабирования интерфейса — в новой версии можно будет не только увеличивать шрифты, но и сами элементы управления, поэтому придётся использовать относительные величины. Также в новой версии обещали улучшение производительности для векторной графики (VectorDrawables).\
\r\n\Эти нововведения впечатляют, но, увы, даже предыдущая версия Android Marshmallow на Апрель 2016 занимает 4,6%, а без должного распространения новые функции будут поддерживаться далеко не всеми разработчиками.\
\r\n\Что действительно было встречено с большой радостью, так это поддержка некоторых особенностей Java 8. Android базируется на Java 7 и лишён таких инструментов, как например лямбда-выражения. Теперь для поддержки функциональности Java 8 можно в Gradle-файле указать следующее:\
\r\n\\r\nandroid {\r\n ...\r\n defaultConfig {\r\n ...\r\n jackOptions {\r\n enabled true\r\n }\r\n }\r\n\r\n compileOptions {\r\n sourceCompatibility JavaVersion.VERSION_1_8\r\n targetCompatibility JavaVersion.VERSION_1_8\r\n }\r\n}\r\n\\r\n\
При этом появится возможность использовать лямбда-выражения (с поддержкой до Android 2.3), в интерфейсах появится поддержка статических методов и методов по умолчанию, а аннотации для каждого поля теперь могут повторяться несколько раз.\
\r\n\Подробности вы можете посмотреть по ссылке: \http://www.youtube.com/watch?v=IL50oWdgfNY\\
\r\n\\Ваким Вёрджес\ (Joaquim Verges) из Twitter рассказывал про анимации в Android. Он отметил, что всё больше разработчиков следуют гайдлайнам Android. Это хорошо, поскольку пользователи получают тот опыт, который ждут от экосистемы, но в тоже время приложения становятся похожими друг на друга. Одним из способов выделить приложение среди других — это качественная анимация. В своём выступлении он показал, как можно передавать View и его расположение с одной Activity в другую (изначально прозрачную), а также поделился практиками использования анимации, чтобы это не сказалось на производительности.\
\r\n\Его выступление здесь: \https://www.youtube.com/watch?v=HLhA0I00TnI\\
\r\n\Ещё одним полезным докладом стало выступление \Хён Ха Дао\ (Huyen Tue Dao) из Trello. Она поделилась советами относительно того, как сделать \
Ключевое значение играет производительность. А она зависит от количества ресурсов, которые использует ваше приложение.\
\r\n\Если есть возможность, то стоит использовать атрибуты вместо отдельных View. Например, чтобы создать картинку с текстом.\
\r\n\Было:\
\r\n\<LinearLayout>\r\n\r\n <ImageView/>\r\n\r\n <TextView/>\r\n\r\n</LinearLayout>\\r\n\
Стало:\
\r\n\<TextView\r\n\r\n drawablePadding="..."\r\n\r\n drawableEnd="..." />\\r\n\r\n\
Этот же совет можно применить к разделителю элементов в ListView — следует использовать атрибут divider вместо отдельных View.\
\r\n\Ну и основной совет был — не наследовать layout_weight, удалять неиспользуемые View и избегать большой вложенности.\
\r\n\При усложнении интерфейса стоит всегда обращать на это внимание и искать пути оптимизации вместо нагромождения разных View.\
\r\n Источник \r\n \r\nСтилиФорматированиеШрифтРазмер \r\n\r\n\Было:\
\r\n\<LinearLayout>\r\n\r\n <LinearLayout>\r\n\r\n <TextView/>\r\n\r\n <TextView/>\r\n\r\n </LinearLayout>\r\n\r\n <TextView/>\r\n\r\n</LinearLayout>\\r\n\
Стало:\
\r\n\<RelativeLayout>\r\n\r\n <TextView/>\r\n\r\n <TextView/>\r\n\r\n <TextView/>\r\n\r\n</RelativeLayout>\\r\n\r\n\
Ознакомиться с советами можно в видео: \https://www.youtube.com/watch?v=-xAdDqwaWJk\\
\r\n\На DroidCon выступал и \Иджит Бойар\ (Yigit Boyar), работающий в команде Android UI Toolkit в Google, а до этого в команде Path. Он поделился опытом в разработке приложений, которые поддерживают и корректно обрабатывают offline-режим. Правильно обработать низкоскоростное соединение и его отсутствие — проблема многих приложений. А приведённая в докладе статистика доказывает, что эта проблема действительно актуальна: 55% трафика Латинской Америки, 30% Восточной Европы, 50% Центральной и Западной Европы, 80% Африки и 60% Азии — это трафик на скорости EDGE (от 120Кбит/с до 384Кбит/с).\
\r\n\При проектировании API нужно думать не в контексте запроса-ответа — нужно задумываться о пользователе, работать в ключе синхронизации. Можно хранить на устройстве локальную модель данных, включая изменения, а при синхронизации использовать вспомогательные поля, в которых хранятся версии объектов или локально изменённые данные. Благодаря такой архитектуре пользовательский опыт от приложения сохранится положительным, даже если соединение нарушилось.\
\r\n\При этом также стоит отказаться от блокирующих интерфейс окон «Подождите», «Идёт загрузка» — при правильной архитектуре возможна синхронизация без блокирования интерфейса.\
\r\n\Если возникла ошибка отправки данных на сервер, простого сообщения об этом (например, Toast или надпись в интерфейсе) мало. Пользователь уже мог закрыть приложение. В таком случае стоит послать пуш-нотификацию, и пользователь сможет повторить отправку. И наконец, если действие не требует наличия соединения с сервером, то оно должно быть доступно оффлайн всегда.\
\r\n\Завершился доклад простым выводом: «Локальный диск — ваш бро, а сеть — не ваш бро».\
\r\n\Всё выступление доступно по ссылке: \https://www.youtube.com/watch?v=n8nG5K_3BJM\\
\r\n\В павильоне DroidCon — \Spherical Image — RICOH THETA\\\r\n\\r\n\
Так прошёл очередной DroidCon, и снова ведущие разработчики поделились своими лучшими практиками и советами. Выступления шли параллельно и, увы, не на все из них удалось попасть. Но записи всех выступлений доступны на YouTube: \https://www.youtube.com/playlist?list=PLnVy79PaFHMXpPlgs1uUny8eb-PEfEQNn\\
\r\n\Теперь ждём конференцию \Google I/O 2016\ — главную конференцию для Android-разработчиков — до 18 мая осталось совсем немного времени!\
\r\n\\Иллюстрация: http://droidcon.com/wp-content/uploads/2016/03/12694513_452322651631196_1947990819381162675_o.jpg\
","code":"items-droidcon","previewText":"17 и 18 марта в Сан-Франциско прошла конференция “DroidCon”, посвящённая Android-разработке. Алексей Калачёв побывал на ней и поделилсся интересными выступлениями.","redirectToRR":false,"title":"DroidCon","companyId":3938,"tags":[{"code":"article","title":"Статья"}],"id":900,"createdAt":"24 мая 2016","image":"https://images.cmsmagazine.ru/klarnetCMSlocal/resized_images/articles_elements/1013/2000/uploadxshjnfhouu.jpg","company":"Иностудио","companyImage":"https://api.cabinet.cmsmagazine.ru/images/company_logos/74c407e263578d03d02c1123aa730b52/1618486102B5drgLNN2UrBirBjmh.png","firstLettersOfName":"АК"},"empty":false,"isAjax":false,"request":{"url":"material","params":{"code":"items-droidcon"}},"isError":false,"similarMaterials":{"response":[{"type_id":1,"author":"Влад Савин","code":"items-questions-about-in-hous-apps","redirectToRR":false,"title":"3 вопроса о корпоративных (in-house) мобильных приложениях","company":"KOTELOV","companyImage":"https://cmsmagazine.ru/klarnetCMSlocal/resized_images/persons/300/500/uploadi0vdpjhrd6.jpg","views_count":538,"firstLettersOfName":"ВС"},{"type_id":1,"author":"Алеся Чумакова","code":"items-we-promote-the-mobile-application","redirectToRR":false,"title":"Продвигаем мобильное приложение: советы ИТ-компании","company":null,"companyImage":"https://cmsmagazine.ru/klarnetCMSlocal/resized_images/persons/300/500/uploadyojfrlhn1u.jpg","views_count":576,"firstLettersOfName":"АЧ"},{"title":"Мобильная цифровая платформа «Вместе.ру»","code":"cases-12457","type_id":3,"author":"DD Planet","company":null,"companyImage":"https://images.cmsmagazine.ru/klarnetCMSlocal/resized_images/users/150/150/uploadppu93sgq23.png","redirectToRR":false,"firstLettersOfName":"DP"},{"title":"Разработка мобильного приложения для сети АЗС ","code":"cases-12493","type_id":3,"author":"KozhinDev","company":null,"companyImage":"https://images.cmsmagazine.ru/klarnetCMSlocal/resized_images/users/150/150/uploadb20hlxgj6f.png","redirectToRR":false,"firstLettersOfName":"KO"},{"title":"Что такое дизайн система и зачем она нужна? Разбираем на примере кейса ВШЭ","code":"cases-8978","type_id":3,"author":"Proscom","company":null,"companyImage":"https://images.cmsmagazine.ru/klarnetCMSlocal/resized_images/users/150/150/uploadiz7hgms3k6.png","redirectToRR":false,"firstLettersOfName":"PR"},{"title":"Клиника 2.0","code":"cases-10606","type_id":3,"author":"VLAD IT","company":null,"companyImage":"https://images.cmsmagazine.ru/klarnetCMSlocal/resized_images/users/150/150/upload2b12yfq1el.jpg","redirectToRR":false,"firstLettersOfName":"VI"},{"title":"Мобильное приложение RuParking","code":"cases-11305","type_id":3,"author":"Arjay Studio","company":null,"companyImage":"https://images.cmsmagazine.ru/klarnetCMSlocal/resized_images/users/150/150/uploadph8bm1dxm4.jpg","redirectToRR":false,"firstLettersOfName":"AS"},{"type_id":3,"author":"Давыдова Наталия ","code":"cases-4443","authorName":"Heads and Hands","redirectToRR":false,"title":"Мобильное приложение FoxRT для работы в Twitter","company":null,"companyImage":"https://cmsmagazine.ru/klarnetCMSlocal/resized_images/persons/300/500/uploadnrio8mmcnr.jpg","firstLettersOfName":"ДН"},{"title":"Живаго Мода — запуск и редизайн сайта на 1С-Битрикс на основе готового решения","code":"cases-11657","type_id":3,"author":"Spectr","company":null,"companyImage":"https://images.cmsmagazine.ru/klarnetCMSlocal/resized_images/users/150/150/uploadf93k2q7xqq.png","redirectToRR":false,"firstLettersOfName":"SP"},{"title":"Мобильный гвоздь. Разработка приложения под iOS","code":"cases-2320","type_id":3,"author":"Т.Т.Консалтинг","company":null,"companyImage":"https://images.cmsmagazine.ru/klarnetCMSlocal/resized_images/users/150/150/upload69cfemlu2s.jpg","redirectToRR":false,"firstLettersOfName":"ТТ"}],"empty":false,"isAjax":false,"request":{"url":"similarMaterials","params":{"code":"items-droidcon"}},"isError":false}},"flowsMenu":{"response":[{"title":"Маркетинг","code":"marketing","newCount":8},{"title":"Создание сайтов","code":"programming","newCount":8},{"title":"Контекстная реклама","code":"context","newCount":3},{"title":"SEO","code":"seo","newCount":5},{"title":"Комплекс услуг","code":"package_of_services","newCount":5},{"title":"Дизайн","code":"graphical_design","newCount":4},{"title":"Программирование","code":"programming","newCount":4},{"title":"SMM","code":"smm","newCount":4},{"title":"Менеджмент","code":"management","newCount":0},{"title":"Digital","code":"digital","newCount":1},{"title":"Мобильная разработка","code":"moblile","newCount":0},{"title":"Интернет-маркетинг","code":"internet_marketing","newCount":0},{"title":"Использование сервиса","code":"service_use","newCount":1},{"title":"Юзабилити","code":"usability","newCount":0},{"title":"Брендинг","code":"branding","newCount":0},{"title":"E-commerce","code":"ecommerce","newCount":0}],"empty":false,"isAjax":false,"request":{"params":{},"url":"flowsMenu"},"isError":false}},"badges":{"isAjax":false,"isError":false,"data":{}},"abTest":{},"catalogList":{"view":"card","sort":null,"sort_direction":null},"favorites":{},"reviewForms":{"criteria":[],"isAjax":false,"success":false,"fields_errors":{}},"flowsSortType":{"sort_type":"fresh"},"agency_cookie":{}}