Дима виноградов старт андроид ру

Дима виноградов старт андроид ру

В этой статье рассмотрим, что такое Instant App, зачем он нужен и как создать такое приложение?

Вопросы и задачи с собеседований на Android разработчика

В прошлом посте я подробно описал процесс поиска работы в Берлине. В течение этого процесса я сталкивался с вопросами, алгоритмическими задачками и Code challenge. В этом посте я распишу свой опыт в этом деле.

Как разработчику найти работу в Германии

В прошлом году мне довелось искать работу в европейской компании на позицию Senior Android Developer. Я хотел бы поделиться своим опытом, и подробно описал весь процесс, как разработчику найти работу в Европе на примере Германии.

RxJava примеры

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

Android permissions

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

Retrofit. Query, Path, RxJava, логи

Продолжаем говорить про Retrofit. Посмотрим, что и как мы можем настроить в нем, чтобы достичь своих целей.

Как в Android получить данные с сервера с помощью Retrofit

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

Circular positioning в ConstraintLayout

В новой версии беты ConstraintLayout, появились circular constraints. С их помощью мы можем настроить два View так, чтобы одно находилось на определенном расстоянии и под определенным углом от другого

На картинке View B находится под углом и на определенном расстоянии от View A

Пример использования Android DiffUtil

В нашем Telegram чате иногда проскакивает следующий вопрос: Как правильно обновлять данные в списке?

Спрашивающий обычно подразумевает два варианта ответа:
1) Передавать новые данные в адаптер и вызывать метод notifyDataSetChanged, чтобы рефрешнуть RecyclerView
2) Создавать новый адаптер, давать ему новые данные и передавать этот адаптер в RecyclerView.setAdapter()

Оба этих варианта не являются правильными, хотя технически они вполне рабочие.

Не так давно я уже делал пост о том, как в Gradle можно использовать переменные для версий библиотек. В этом посте я хотел бы развить тему и предложить еще более удобное решение.

Droidcon Berlin 2017

Мне довелось побывать на Android конференции DroidCon Berlin 2017. В этом посте я хотел бы описать свои впечатления и рассказать, как там все организовано.

Переменные в Gradle для версий библиотек

При использовании какой-либо библиотеки, часто приходится добавлять в dependencies несколько ее частей и всем им прописывать одну и ту же версию. Самый распространенный пример — Android Support Library.

Обычно код в dependencies выглядит так:

Gradle позволяет избавиться от этой копипасты.

Android MVP пример для начинающих. Без библиотек и интерфейсов.

В этом посте описывается несложный пример MVP, без использования запутывающих интерфейсов и сложных библиотек.

Источник

Architecture Components

Android Architecture Components — это набор решений от Google, которые помогут вам в разработке приложений.

Я разработал бесплатный курс по этой теме. Он охватывает следующие подтемы:

Читайте также:  Дельта тест для андроид

1. Activity и Fragment Lifecycle

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

Lifecycle — отслеживает текущий статус Activity и может уведомлять об этом своих подписчиков

LiveData — получает и хранит данные, может отправлять их своим подписчикам

ViewModel — поможет сохранить живыми необходимые для вас объекты при повороте экрана

Полезные ссылки по теме:

2. База данных

Room — удобная обертка для работы с базой данных.

3. Постраничная загрузка данных

Paging Library — библиотека для постраничной загрузки данных из базы данных, с сервера или любого другого источника.

4. Data Binding

Избавит вас от написания кучи кода по работе с View. Его удобно использовать с ViewModel.

5. Navigation Architecture Component

Новый компонент для навигации по экранам приложения.

6. WorkManager

Новый механизм выполнения фоновых задач

7. Примеры использования

Обсуждать эти темы можно в нашем Telegram чате.

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

Список уроков:

В этом уроке рассмотрим возможности Lifecycle. Как подписаться на его события. Как узнать текущее состояние Activity.

В этом уроке рассмотрим основные возможности LiveData. Как подписаться на его данные. Как помещать в него данные. Как он взаимодействует со своими подписчиками.

В прошлом уроке мы разобрались, как отправлять и получать данные в LiveData. В этом уроке рассмотрим несколько дополнительных возможностей. Как преобразовать тип данных с помощью map. Как создать свой LiveData. Как объединить несколько LiveData в один с помощью MediatorLiveData.

В этом уроке рассмотрим, как использовать ViewModel. Как сохранять данные при повороте экрана. Как передать Context в ViewModel. Как передать свои данные в конструктор модели с помощью фабрики. Как передать данные между фрагментами. Что использовать: ViewModel или onSavedInstanceState.

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

В этом уроке более подробно рассмотрим возможности Entity. Как задать имя таблицы. Как задать имя или тип поля. Как создать составной или внешний ключ. Как создать индекс. Как использовать вложенные объекты.

В этом уроке рассмотрим подробнее аннотации Insert, Update и Delete. А также узнаем, как использовать транзакции в Room.

В этом уроке поговорим подробнее про Query. В каком виде мы можем получать данные: List, массив, Cursor, LiveData. Как передавать параметры. Как получать только некоторые поля. Как с помощью Query выполнять update и delete запросы в Room.

В этом уроке рассмотрим возможность совместного использования RxJava и Room. Как получать данные в Flowable, Single и Maybe.

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

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

В этом уроке рассмотрим, как выполняется миграция версий базы данных в Room

В этом уроке рассмотрим, как тестировать Room. Напишем несколько тестов для Dao и протестируем миграцию.

В этом уроке начнем знакомство с Paging Library. Рассмотрим общую схему работы связки PagedList и DataSource.

В этом уроке рассмотрим, какие параметры мы можем задать для PagedList. Подробно разберем, какие значения необходимо передавать в callback.onResult в DataSource. Научимся использовать режим Placeholders.

В этом уроке обсудим, в каких потоках выполняется код загрузки данных. Разберем возможности LivePagedListBuilder. Узнаем, как использовать Paging Library с Room.

В этом уроке рассмотрим, чем отличаются существующие виды DataSource: PositionalDataSource, PageKeyedDataSource, ItemKeyedDataSource

В этом уроке знакомимся с Data Binding.

В этом уроке рассматриваем возможность написания кода в layout и получаем View от биндинга.

В этом уроке рассмотрим как обрабатывать события View.

В этом уроке разберем, как настроить автоматическую передачу данных в View и обратно.

В этом уроке разберем, как можно расширить возможности биндинга с помощью Binding Adapter и Binding Conversion.

Читайте также:  Cool reader для андроид какие форматы читает

В этом уроке рассмотрим примеры использование Android Data Binding с include, ViewStub и RecyclerView

В этом уроке рассмотрим простой пример использования Navigation Architecture Component.

В этом уроке рассмотрим как передавать данные при навигации.

В этом уроке разбираемся, как задавать параметры при навигации.

В этом уроке рассмотрим интеграцию Navigation Component c Overflow Menu, Navigation Drawer и BottomNavigationView.

В этом уроке рассмотрим вложенный граф, global action и deep link.

В этом уроке знакомимся с WorkManager.

В этом уроке задаем критери для запуска задачи.

В этом уроке рассматриваем, как запускать задачи в определенном порядке

В этом уроке рассмотрим как передать данные в задачу и как получить результат

В этом уроке я распишу, что будет в практических уроках.

В этом уроке разбираем экран Tasks (список задач) приложения TodoApp

В этом уроке разбираем экран TaskDetail (просмотр задачи) приложения TodoApp

Курс бесплатен. Если у вас есть желание выразить благодарность, то используйте Яндекс-форму или PayPal. Спасибо!

Источник

Полный список

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

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

Позже я наткнулся на статью «Five of the best Android development books». Интерес снова появился, стало понятно куда двигаться, я начал читать эти книги. Понял не все, но уже гораздо больше чем с первых примеров. Но если читать такие книги полностью с нуля, то многое будет не очевидно и непонятно.

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

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

В отличие от некоторых авторов я не собираюсь научить вас программированию за «24 часа» или за «30 уроков». Мы все понимаем, что это невозможно ) Я не знаю, сколько у меня получится уроков. Думаю, что хватит около сотни, чтобы дать весь базис достаточно подробно. А потом еще сотня уйдет на различные продвинутые фишки. В общем тем, кто начинает изучать, скорее всего не придется много бегать по другим сайтам (кроме официального хелпа) за дополнительными знаниями. Здесь вы найдете много полезной, последовательной и изложенной простым языком информации.

Надо понимать, что мои уроки это не всегда руководство «как именно надо делать». Я могу чем-то пренебречь и что-то упустить, чтобы показать тему урока и не давать лишний материал. Поэтому прошу не считать все изложенное в уроках единственно правильным способом реализации.

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

На данный момент уроки охватывают темы:

— создание экрана (в редакторе и программно)
— обработчики нажатия
— логи и всплывающие сообщения
— обычное меню, контекстное меню
— анимация View-компонентов
— создание и вызов Activity (+ возврат результата)
— Activity Lifecycle (состояния Activity)
— Intent, Intent Filter
— хранение данных (Preferences, SQLite)
— список и адаптеры
— диалоги
— Parcel, Parcelable
— Preferences при хранении настроек приложения
— работа с файлами
— Tab вкладки
— парсинг XML
— асинхронность (Handler, AsyncTask)
— сервисы
— Content Provider
— обработка касаний, мультитач
— фрагменты
— Action Bar, ActionMode
— виджеты
— ключи и подпись приложения
— ViewPager
— воспроизведение звука и видео
— запись звука
— работа с камерой
— сенсоры
— GPS
— Google Maps
— рисование

Читайте также:  Как сделать android system webview системным

Я продолжаю читать книги и уроки будут появляться, пока я сам буду развиваться. В итоге, я думаю, мы придем к тому, что станем достаточно продвинутыми разработчиками, востребованными на рынке. В общем, как говорит один клоун из зомбоящика — «не переключайтесь» ) Будет интересно!

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

Разработка ведется на Java. Также могут понадобиться знания SQL, XML и прочих смежных технологий. Считается, что вы знакомы с ними. Если нет, то что-нибудь базисное по Java надо будет прочесть.

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

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

Иногда звучат высказывания, что большинство уроков сделаны для Android 2.3, а сейчас уже вышел Android версии, например, 100500 и уроки устарели. Один чудик как-то вообще написал, что уроки на 90% состоят из deprecated методов. Очень я не люблю комментировать чушь, но для начинающих я выскажу свое мнение по поводу этого всего дилетантства.

Я не могу с каждым выходом новой версии андроида переделывать все уроки. Тем более что, переделывать то ничего и не надо. Подавляющее большинство уроков останется прежними и все будет отлично работать на любой версии. К тому же доля устройств на Android 2.Х еще пока достаточно велика, чтобы ею пренебречь. И вы в ваших приложениях будете минимальную версию указывать 2.2 или 2.3, чтобы не потерять целый сегмент пользователей. Так что я не понимаю, в чем смысл кипиша.

Да, есть такое, что с выходом новых версий, некоторые уроки действительно кардинально устаревают и их надо обновлять. Это, например, коснулось Урока 52, и я сделал его обновление в отдельном уроке. Но постоянно отслеживать и обновлять целый урок из-за того, что там теперь один метод (о ужас-ужас. ) deprecated — это тяжко. Не забывайте, что я занимаюсь сайтом в свое свободное время. И я лучше потрачу его на написание новых материалов, чем на отслеживание и фикс устаревших методов.

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

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

Присоединяйтесь к нам в Telegram:

— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.

— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование

— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня

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

Источник

Оцените статью