Обозначение | Уровень важности |
---|---|
(****) | Без изучения этого материала невозможно успешное прохождение темы |
(***) | Материал, без которого сложно успешно завершить изучение темы |
(**) | Важный материал, рекомендуемый к изучению |
(*) | Полезная литература, улучшающая навыки |
Программа обучения разделена на секции. Каждая секция состоит из
- Теоретической части;
- Практической части;
- Теста;
Каждая секция начинается с выполнения практического задания. Теоретический материал изучается по мере необходимости для выполнения практики. После завершения практического задания необходимо в github создать merge request на ментора, чтобы он смог проверить задание. Если задание выполнено успешно, то ментор предоставляет тест по пройденной секции. Для успешного прохождения теста в большинстве случаев достаточно знаний, полученных в ходе выполнения практического задания и прочтения необходимой для него теории.
Стоит отметить, что ментор в силу различных обстоятельств не всегда может оперативно проверять merge request'ы и предоставлять тесты. Поэтому, если ментор вам говорит, что сможет проверить задание/предоставить тест только через несколько часов - приступайте к выполнению следующей секции программы обучения. Важно одновременно непроверенным может быть не более одной секции программы обучения. То есть, чтобы приступить к 5ой секции, Ваше практическое задание по 3ей секции должно быть одобрено, а тест пройден.
В случае возникновения вопросов во время выполнения практического задания, можно просить помощи у ментора. Однако не стоит подходить к ментору с недекомпозированной задачей из разряда "Я не понимаю, как сверстать экран". Декомпозируйте задачу, чтобы задать ментору более конкретный вопрос. Также не стоит сразу же спрашивать ментора, как только возникла трудность. Для начала попробуйте самостоятельно найти ответ на свой вопрос в интернете.
1. ООП:
- Основные принципы (****)
2. SOLID
- Принципы SOLID (***)
- SOLID в Java (*)
3. Работа с Git, gitflow
- Основные команды : init, clone, add, status, stash, commit (-m, -am, --amend), fetch, pull, push, branch, checkout, merge (****)
- Что такое git flow (***)
- Первоначальная настройка: конфигурация username и email (***)
4. Создание проекта, среда разработки Android Studio
- [Установка Android Studio] (https://developer.android.com/studio/preview/index.html) (****)
- Создание нового проекта (****)
- Основы интерфейса Android Studio (****)
5. Gradle
- Gradle (***)
- В GitHub создать новый репозиторий и следуя инструкциям, склонировать его к себе на компьютер. В настройках репозитория дать доступ ментору.
- В глобальных конфигурациях git прописать корректное имя пользователя и e-mail, которые будут использоваться для подписи коммитов.
- Добавить
.gitignore
. Содержание файла можно взять с ресурса: https://www.gitignore.io/api/androidstudio. Cделать коммит и запушить изменения на remote-сервер вmaster
ветку - Переключиться на новую ветку
develop
. - Создать новый android-проект (Phone and Tablet -> Empty Activity).
- Добавить в gradle-файл библиотеку retrofit http://square.github.io/retrofit/
- Запустить проект на телефоне/симуляторе
- Cделать коммит и запушить изменения на remote-сервер в
develop
ветку - После завершения работ над задением отправить ментору количество затраченного времени на практическое выполнение задачи.
Основы:
- [Java-платформа] (https://docs.oracle.com/javase/tutorial/getStarted/intro/definition.html) (**)
- Типы данных и переменные (****)
- [Преобразования базовых типов данных] (https://metanit.com/java/tutorial/2.2.php) (****)
- [Операции языка Java] (https://metanit.com/java/tutorial/2.3.php) (****)
- [Массивы] (https://metanit.com/java/tutorial/2.4.php) (***)
- [Условные конструкции] (https://metanit.com/java/tutorial/2.5.php) (****)
- [Циклы] (https://metanit.com/java/tutorial/2.6.php) (****)
- [Методы] (https://metanit.com/java/tutorial/2.7.php) (****)
- [Рекурсивные функции] (https://metanit.com/java/tutorial/2.8.php) (***)
- [Введение в обработку исключений] (https://metanit.com/java/tutorial/2.10.php) (**)
- [Java Code Conventions - Oracle] (http://www.oracle.com/technetwork/java/codeconventions-150003.pdf) (****)
Отладка
Все задачи должны быть выполнены в указанном репозитории в отдельной ветке, вида training/lastname_firstname_date. После выполнения должен быть создан merge request на ментора.
Важно! Весь код должен быть написан по предоставленному Java Code Conventions
- Работа с примитивными типами
- Работа со строками
- Работа с массивами
- Завершить task и отправить ментору затраченное время
1. Классы
- Классы и объекты (****)
- Пакеты (****)
- Модификаторы доступа и инкапсуляция (****)
- Статические члены и модификатор static (****)
- Объекты как параметры методов (****)
- Наследование, полиморфизм и ключевое слово super (****)
- Абстрактные классы (****)
- Иерархия наследования и преобразование типов (****)
- Внутренние классы (****)
- Интерфейсы (****)
- Интерфейсы в механизме обратного вызова (***)
- Перечисления enum (****)
- Класс Object и его методы (***)
- Обобщенные типы и методы (***)
- Наследование и обобщения (***)
- Типы ссылок (***)
- Ссылочные типы и клонирование объектов (***)
2. Обработка исключений
- Оператор throws (****)
- Классы исключений (****)
- try-with-resources (****)
- Создание своих классов исключений (**)
3. Коллекции
- Введение в коллекции в Java (****)
- Класс ArrayList и интерфейс List (****)
- Структуры данных в картинках. ArrayList (****)
- Класс LinkedList (**)
- Структуры данных в картинках. LinkedList (**)
- Класс HashSet (****)
- Класс TreeSet (***)
- Интерфейсы Comparable и Comporator. Сортировка (***)
- Очереди и класс ArrayDeque (**)
- Отображения и класс HashMap (****)
- Структуры данных в картинках. HashMap (****)
- Класс TreeMap (**)
- Итераторы (**)
4. Работа со строками
- Введение в строки. Класс String (****)
- Основные операции со строками (****)
- StringBuffer и StringBuilder (***)
- Регулярные выражения (**)
5. Лямбда-выражения
- Введение в лямбда-выражения (****)
- Лямбды как параметры методов и ссылки на методы (****)
- Встроенные функциональные интерфейсы (**)
Все задачи должны быть выполнены в указанном репозитории в отдельной ветке, вида training/lastname_firstname_date. После выполнения должен быть создан merge request на ментора.
Все задачи должны быть реализованы в одном файле и разделены комментариями, указывающими на номер или текст задания.
Важно! Весь код должен быть написан по предоставленному Java Code Conventions
- Настроить проект для java 8
- Написать простое лямбда-выражение в переменной
myClosure
, лямбда-выражение должно выводить в консоль фразу "I love Java". Вызвать это лямбда-выражение. Далее написать функцию, которая будет запускать заданное лямбда-выражение заданное количество раз. Объявить функцию так:public void repeatTask (int times, Runnable task)
. Функция должна запускатьtimes
раз лямбда-выражениеtask
. Используйте эту функцию для печати "I love Java" 10 раз. - Условия: есть начальная позиция на двумерной плоскости, можно осуществлять последовательность шагов по четырем направлениям up, down, left, right. Размерность каждого шага равна 1. Задание:
- Создать enum
Directions
с возможными направлениями движения - Создать метод, принимающий координаты и одно из направлений и возвращающий координату после перехода по направлению
- Создать метод, осуществляющий несколько переходов от первоначальной координаты и выводящий координату после каждого перехода. Для этого внутри метода следует определить переменную
location
с начальными координатами (0,0) и массив направлений, содержащий элементы [up, up, left, down, left, down, down, right, right, down, right], и програмно вычислить какие будут координаты у переменнойlocation
после выполнения этой последовательности шагов. Для вычисленеия результата каждого перемещения следует использовать созданный ранее метод перемещения на один шаг.
- Создать интерфейс Shape с двумя методами perimeter и area, выводящими периметр и площадь фигуры соответственно, после чего реализовать и использовать для вывода периметра и площади следующие классы, реализующие интерфейс Shape:
Rectangle
- прямоугольник с двумя свойствами: ширина и длинаSquare
- квадрат с одним свойством: длина стороныCircle
- круг с одним свойством: диаметр круг
В случае если по ссылке встречается пошаговый гайд - рекомендуется его выполнить в отдельном проекте.
1. Начало разработки под Android
- Начало разаработки (****)
2. Верстка
3. Типы layout'ов
- Frame Layout (****)
- Linear Layout (****)
- Relative Layout (****)
4. Splash Screen
- Как правильно реализовать (****)
4. BottomNavigationView
- Обзор (****)
5. App Bar
- Обзор (****)
6. RecycleView Adapter Видео-лекция Яндекса: Школа мобильной разработки – AdapterView. Владимир Тагаков Лектор рассказывает про recycleView, желательно смотреть только после того, как появится уже некоторый опыт в создании компонентов RecycleView (**) 7. Constraint Layout
- Документация (****)
- Работа с различными свойствами (****)
8. Ресурсы
- Обзор (****)
- Видео-лекция Яндекса: Школа мобильной разработки – MyFirstApp (Часть 1) Роман Григорьев Описывает ресурсы андроид приложения, а так же различие релизной, дебажной сборки и signing config (**)
- Локализация (**)
- Типы ресурсов (**)
- Шрифты в XML (**)
- Загружаемые шрифты (**)
- Поддержка разных экранов (**)
- Zeplin (***)
8. Анимации
- Обзор доступных фреймворков (**)
- Property Animation (**)
- Transitions (**)
- Animated Vector Drawable (**)
- Physics Based Animation (**)
- Motion Layout (**)
9. Codelabs
- Your first interactive UI (**)
- The layout editor (**)
- Text and scrolling views (**)
- Drawables, styles, and themes (**)
- Clickable images (**)
- Input controls (**)
- Menus and pickers (**)
- User navigation (**)
- Adaptive layouts (**)
Важно В компании при разработке любого мобильного приложения считается правилом хорошего тона придерживаться нефункциональных требований, описанных в данной статье
Работа должна производится в созданном ранее проекте.
Все изменения должны быть закоммичены, а названия коммитов должны коротко и исчерпывающе описывать содержащие изменения. Каждый коммит должен быть рабочим, отправка некомпилирующегося кода недопустима. Для работы над этим заданием необходимо переключится на ветку layouts
и все изменения пушить в нее. После завершения работы над задачей в gitlab необходимо создать merge request в ветку develop
.
Код должен быть читабельным и написан согласно code-style. В системе PS также необходимо создать созвучную задачу, в которую после завершения будет залогировано время.
- Сделать так, чтобы на домашнем экране Android отображалась иконка и название приложения "Хочу помочь". Ресурсы иконок тут.
- Реализовать Splash Screen согласно макету.
- Реализовать экран "Профиль" согласно макету.
- Экран "Профиль" необходимо отображать после Splash Screen. По нажатию стрелки назад, приложение закрывается.
- Необходимо реализовать нижний элемент навигации с помощью стандартного
BottomNavigationView
. Пункт "Помочь" визуально не должен отличаться от остальных четырех. Размеры иконок оставить стандартные дляBottomNavigationView
- 24dp. - В нижнем меню навигации по-умолчанию должен быть выбран пункт "Профиль".
- Верстка должна быть реализована в xml.
- Верстка должна быть выполнена с учетом "pixel perfect" - когда все элементы дизайна расположены и имеют размеры абсолютно идентичные макету для экрана с теми же размерами, что и макет, и адекватно масштабироваться для других размеров и разрешений.
- Все переиспользуемые размеры в xml должны быть вынесены в dimes, цвета в colors, а строки в strings.
- Никаких "магических чисел", все должно иметь понятные названия.
1. Android OS
- История Android (**)
- Архитектура Android (**)
2. Application
- Application (***)
- Context (***)
- Файл Manifest (****)
3. Activity
- Activity - основы (****)
- Управление жизненным циклом Activity (****)
- Обработка изменений конфигурации экрана (****)
- Task и Back Stack (**)
- Передача данных между Activity. Обзор (****)
- Передача данных между Activity. Интерфейс Parcelable (****)
- Интерфейс Serializable (**)
- Сравнение Parcelable и Serializable (**)
4. Fragment
- Fragment - основы (****)
- Диалоговые окна (****)
- Передача данных между Fragment (****)
- Target fragment (**)
- Видео-лекция Яндекса: Школа мобильной разработки – Fragments (Часть 1). Денис Загаевский Лектор весьма неплохо описывает концепцию фрагментов и как их использовать (**)
5. SearchView
- Обзор (****)
6. ViewPager
- Обзор (****)
7. Списки
- ListView (**)
- RecyclerView и Adapter (****)
8. Работа со сторонними приложениями и permissions
- Run-time permissions(****)
- Intent и фильтры(****)
- Взаимодействие с другими приложениями(****)
- Получение фото с камеры(****)
9. BroadcastReceiver
10. Codelabs
- Activities and intents (**)
- Activity lifecycle and state (**)
- Implicit intents (**)
- RecyclerView (**)
- Broadcast receivers (**)
- Alarm Manager (**)
- Fragments (**)
- Fragment communication (**)
Работа должна производится в созданном ранее проекте.
Все изменения должны быть закоммичены, а названия коммитов должны коротко и исчерпывающе описывать содержащие изменения. Каждый коммит должен быть рабочим, отправка некомпилирующегося кода недопустима. Для работы над этим заданием необходимо переключится на ветку fragments
и все изменения пушить в нее. После завершения работы над задачей в gitlab необходимо создать merge request в ветку develop
.
Код должен быть читабельным и написан согласно code-style.
- Реализовать диалог согласно макету
- Диалог необходимо открывать при нажатии на изображение пользователя на экране "Профиль".
- По нажатию на кнопку "Выбрать фото" не должно ничего происходить.
- По нажатию на кнопку "Сделать снимок" необходимо запускать камеру устройства. Сделанное фото должно заменять текущее на экране профиля
- По нажатию на кнопку "Удалить" необходимо удалять текущее изображение пользователя на экране профиля
- Реализовать экран "Категории помощи" приложения согласно макету.
- Стрелку назад верстать не надо.
- Экран "Категории помощи" необходимо отображать после Splash Screen. Переход на экран профиля теперь происходит при выборе пункта "Профиль" в нижнем меню.
- В нижнем меню навигации по-умолчанию должен быть выбран пункт "Помочь".
- Экран должен представлять из себя fragment с
RecyclerView
.
- Реализовать экран "Поиск" согласно макету. Переход на этот экран осуществляется при выборе пункта "Поиск" в нижнем меню
- Экран необходимо построить с использованием
SearchView
,ViewPager
и фрагментов. - У
SearchView
необходимо реализовать только верстку без логики. - Необходимо реализовать возможность изменять выбранную вкладку перелистыванием с плавной анимацией.
- В качестве названий для результатов необходимо использовать произвольные случайные строки.
- Данные для отображения результата необходимо генерировать случайным образом при каждом перелистывании
ViewPager
.
1. Работа с файлами в java. Сериализация
- Потоки ввода-вывода (****)
- Закрытие потоков (****)
- Чтение и запись файлов. FileInputStream и FileOutputStream (****)
- Классы ByteArrayInputStream и ByteArrayOutputStream (**)
- Буферизуемые потоки. Классы BufferedInputStream и BufferedOuputStream (****)
- Чтение и запись текстовых файлов. FileReader и FileWriter (**)
- Буферизируемые символьные потоки. BufferedReader и BufferedWriter (**)
- Сериализация объектов (**)
- Класс File. Работа с файлами и каталогами (****)
- Работа с ZIP-архивами (**)
2. JSON
- Понятие (****)
- Парсинг в Android (****)
- Gson (****)
- Moshi (*)
- Jackson (*)
3. Работа с файловой системой Android
- SharedPreferences (****)
- Настройки через Preferences (**)
- Android data storage (****)
- FileProvider (***)
4. Работа с датой и временем
- Date, Calendar (****)
- Date в Java 8 (****)
- Работа со временем в java (**)
5. DiffUtils
- Обзор (****)
- ListAdapter (****)
6. Codelabs
- Shared preferences (**)
- App settings (**)
Работа должна производится в созданном ранее проекте.
Все изменения должны быть закоммичены, а названия коммитов должны коротко и исчерпывающе описывать содержащие изменения. Каждый коммит должен быть рабочим, отправка некомпилирующегося кода недопустима. Для работы над этим заданием необходимо переключится на ветку data_structures
и все изменения пушить в нее. После завершения работы над задачей в gitlab необходимо создать merge request в ветку develop
.
Код должен быть читабельным и написан согласно code-style. Верстка экранов должна быть выполнена по принципу pixel-perfect.
- Доработать логику диалога на экране "Профиль".
- По нажатию на кнопку "Выбрать фото" необходимо открывать галерею устройства. Выбранное в галерее фото должно заменять текущее на экране профиля
- Подключить к проекту ThreeTenABP. Все операции с датой и временем должны быть реализованы через классы данной библиотеки.
- Сверстать экран "Новости" согласно макету. Переход на этот экран осуществляется при выборе пункта "Новости" в нижнем меню. Экран содержит список благотворительных событий, относящихся к выбранным категориям.
- Одно событие может относиться сразу к нескольких категориям помощи.
- Сверстать экран "Фильтр" согласно макету. Переход на этот экран осуществляется при клике на иконку в правом верхнем углу экрана "Новости".
- На экране вместо фразы "Как вы хотите помочь?" необходимо отображать "Категории помощи" и ниже список всех возможных категорий (категории, которые отображаются на главном экране - дети, пожилые и тд).
- При смене категорий в фильтре обновлять список на экране "Новости" обязательно при помощи DiffUtils.
- Сверстать экран "Детальное описание события" согласно макету. Переход на этот экран осуществляется при выборе любого события из списка. Данный экран должен получить информацию о том, какое событие было выбрано на предыдущем шаге.
- Необходимо создать два json'а. Содержащих в себе массивы категорий и благотворительных событий. Информация об объектах должна быть достаточной для формирования отображений на экранах, а также для корректного разделения по категориям помощи. Каждый объект должен обладать уникальным (среди объектов своего типа) идентификатором. Проверить корректность созданных json-ов через online-parser. Записать их в 2 файла и поместить в папку assets проекта.
- Необходимо создать сущности соответствующие понятиям Категория и Событие.
- Создать класс, который будет читать созданные json из файлов, парсить их и преобразовывать в массивы.
- Наполнить экраны полученными данными.
1. Базовые понятия
- Многопоточность. Определение (****)
- Мьютекс (**)
- Семафор (**)
- Дэдлок (***)
- Starvation and Livelock (***)
- Атомарные операции (***)
- Atomic типы (***)
2. Многопоточность в java
- Java Memory Model (****)
- Thread (****)
- Синхронизация потоков. Оператор synchronized (****)
- Синхронизированные коллекции (***)
- Volatile поля (***)
- Executors (****)
3. Фоновая работа в Android
-
Loader (Deprecated) (**)
-
AsyncTask (Deprecated) (***)
-
Видео-лекция Яндекса: Школа мобильной разработки – Background. Алексей Макаров обозревает инструменты для взаимодействия с потоками в андроиде НО Нужно учитывать, что asyncTask и Loader помечены как deprecated (**)
4. Service
- Service - основы (****)
- IntentService (****)
- Job Scheduler (****)
- Work Manager (**)
- Background Execution Limits Android 8.0+ (**)
- Видео-лекция Яндекса: Школа мобильной разработки – Service & Broadcasts. Алексей Макаров Лектор рассказывает про сервисы, их сферу применения, какие флаги к ним применяются и как они работают достаточно подробно (**)
5. Codelabs
- JobScheduler (**)
- WorkManager (**)
- AsyncTask (**)
Работа должна производится в созданном ранее проекте.
Все изменения должны быть закоммичены, а названия коммитов должны коротко и исчерпывающе описывать содержащие изменения. Каждый коммит должен быть рабочим, отправка некомпилирующегося кода недопустима. Для работы над этим заданием необходимо переключится на ветку concurrency
и все изменения пушить в нее. После завершения работы над задачей в gitlab необходимо создать merge request в ветку develop
.
Код должен быть читабельным и написан согласно code-style.
- В рамках предыдущего задания было реализовано чтение из файла. Реализовать чтение из файла и парсинг в background-потоке каждым из предложенных способов. С помощью AsyncTask, Executor, IntentService. При повороте экрана не должно происходить повторное чтение из файла.
- Перед отправкой данных остановить рабочий background-поток (Thread.sleep(5000)), для показательного отображения Progress Indicator (имитация запроса к сети).
- Реализовать Progress Indicator на экранах "Категории помощи" и "Новости". Индикатор должен показываться с момента запроса данных до момента их отображения на экране. Внимание! Все действия c UI должны совершаться в главном потоке.
- Для сохранения и восстановления данных при смене конфигурации использовать savedInstanceState.
1. Понятие реактивности
2. RxJava
- RxJava (****)
- reactivex (**)
- Введение в RxJava: Почему Rx? (**)
3. Android расширения
- RxAndroid (позволяет легко переключаться на main поток) (***)
- RxBinding (***)
- Использование RxJava совместно с RxBinding (***)
Работа должна производится в созданном ранее проекте.
Важно! Для пункта 2 используется отдельный проект, указанный в задании
Все изменения должны быть закоммичены, а названия коммитов должны коротко и исчерпывающе описывать содержащие изменения. Каждый коммит должен быть рабочим, отправка некомпилирующегося кода недопустима. Для работы над этим заданием необходимо переключиться на ветку rx_java
и все изменения пушить в нее. После завершения работы над задачей в gitlab необходимо создать merge request в ветку develop
.
Код должен быть читабельным и написан согласно code-style. В системе PS также необходимо создать созвучную задачу, в которую после завершения будет залогировано время.
- Клонировать проект и реализовать все методы так, чтобы тесты проходили.
- Все методы должны быть реализованы в указанном репозитории в отдельной ветке, вида training/lastname_firstname_date. После выполнения должен быть создан merge request на ментора.
- Подключить фреймворк
RxJava
, а так же библиотекиRxAndroid
иRxBinding
. - Создать экран "Авторизация" согласно макету.
- Кнопка "Войти" активна только в момент, когда в поля логин и пароль введено по 6 или более символов. В противном случае кнопка неактивна. Реализовать данное поведение с помощью
RxJava
. - В неактивном состоянии кнопка "Войти" имеет серый фон вместо зеленого.
- При повороте экрана данные, введенные в поля ввода, должны сохраняться.
- Экран "Авторизация" необходимо отображать после Splash Screen. По нажатию стрелки назад, приложение закрывается. Переход на экран "Категории помощи" происходит при нажатии на активную кнопку "Войти".
- Доработать вкладку "По мероприятиям" экрана "Поиск"
- Реализовать логику работы
SearchView
. Поиск происходит в тот момент, когда пользователь 500 мс ничего не вводил в строку и не удалял из нее. То есть, если пользователь быстро вводит слово в строку поиска, поиск отрабатывает только 1 раз для всего слова целиком. Реализовать данное поведение с помощьюRxJava
. - Данные для отображения результата необходимо брать из событий из созданных ранее json файлов.
- Если в строку поиска ничего не ввели, то вместо результатов поиска отображаем заглушку как на макете.
- Если введенная в поиск строка не соответствует названию ни одного события, то отображаем пустой список результатов.
- При повороте экрана, а также при перелистывании
ViewPager
на вкладку "По НКО" и обратно строка, введенная в поиске, список результатов и позиция списка должны сохраняться.
1. Базовые понятия
- HTTP (***)
- HTTP codes (***)
- RESTful (***)
- RESTful API — ложь (*)
- WebSocket (**)
2. Библиотеки
- OkHttp (****)
- Retrofit (****)
- Handling API calls using Retrofit 2 and RxJava 2 (****)
- OkHttp. Interceptors (***)
- OkHttp which ignores all SSL errors (***)
- Logging interceptor for okhttp (**)
4. Отладка. Перехват и подмена трафика мобильных устройств
- Postman (**)
- Fiddler (**)
- Charles (**)
- Перехват и подмена трафика мобильных устройств (*)
5. Codelabs
Работа должна производится в созданном ранее проекте.
Все изменения должны быть закоммичены, а названия коммитов должны коротко и исчерпывающе описывать содержащие изменения. Каждый коммит должен быть рабочим, отправка некомпилирующегося кода недопустима. Для работы над этим заданием необходимо переключится на ветку networking
и все изменения пушить в нее. После завершения работы над задачей в gitlab необходимо создать merge request в ветку develop
.
Код должен быть читабельным и написан согласно code-style.
- Необходимо реализовать транспортный слой приложения, который будет осуществалять загрузку данных с сервера. Запросы, реализуемые сервером, и формат ответов можно посмотреть открыв ссылку в браузере. Важно Сервер доступен только из сети SimbirSoft.
- Данные от сервера получать в виде Observable
- Все "тяжелые" операции должны быть реализованы в фоновом потоке
- На время выполнения фоновых операций пользователю должен быть показан Activity Indicator
- Заменить загрузку из файла на старте приложения на загрузку с сервера. В случае если ответ от сервера ошибочен - загрузить данные из файла.
- Все "тяжелые" операции должны быть реализованы в фоновом потоке
- На время выполнения фоновых операций пользователю должен быть показан Activity Indicator
1. Android SQLite
- Работа с SQLite средствами Android SDK (**)
- ORM (**)
2. Основы Realm
- Документация по Realm (****)
- DatabaseProvider в androidbase (**)
3. Основы Room
- Документация по Room (****)
- Room и Rx (****)
4. Content Provider
- Основы (**)
- Видео-лекция Яндекса: Школа мобильной разработки – Content provider. Максим Хромцов (**)
5. Codelabs
- Codelab по Room Java (***)
- Codelab по Room Kotlin (***)
- Paging (***)
Работа должна производится в созданном ранее проекте.
Все изменения должны быть закоммичены, а названия коммитов должны коротко и исчерпывающе описывать содержащие изменения. Каждый коммит должен быть рабочим, отправка некомпилирующегося кода недопустима. Для работы над этим заданием необходимо переключится на ветку data_base
и все изменения пушить в нее. После завершения работы над задачей в gitlab необходимо создать merge request в ветку develop
.
Код должен быть читабельным и написан согласно code-style. В системе PS также необходимо создать созвучную задачу, в которую после завершения будет залогировано время.
- Необходимо создать базу данных с использованием Room для хранения сущностей Категории и Благотворительных событий.
- При первом получении данных для сущностей Категории и Благотворительные события, сохранять данные в базе данных, и дальнейшее получение производить из нее. Обновление данных должно происходить только для новой сессии.
- Чтение и запись должны быть реализованы в фоновом потоке
- На время выполнения фоновых операций пользователю должен быть показан Activity Indicator
- Наполнение экранов Категории и Благотворительных событий должно происходить из созданной базы данных
- Все "тяжелые" операции должны быть реализованы в фоновом потоке
- На время выполнения фоновых операций пользователю должен быть показан Activity Indicator
1. Архитектура
-
Принципы SOLID (****)
-
MVC, MVP, MVVM (**)
-
MVI (**)
-
Redux (eng) (**)
-
RIBs 1 (*)
-
RIBs 2 (*)
-
Про создание архитектур (***)
-
Moxy - ссылка на библиотеку (****)
-
Видео-лекция Яндекса: Школа мобильной разработки – MVP&Co. Дмитрий Попов рассказывает про архитектуру и наглядно показыватет как архитектура влияет на приложение в разработке. рекомендуется просмотр до момента, когда лектор начинает рассказывать про тестирование (**)
2. Clean Architecture
- Статья самого Дядюшки Боба (****)
- Хороший цикл статей (****)
- Видео-доклад "Чистая архитектура. Погружение" (****)
- Пример использования архитектуры (***)
- Заблуждения Clean Architecture (***)
- Руководство по применению чистой архитектуры в Android проектах (**)
3. DI
- Dagger 2 - ссылка на библиотеку (****)
- Dagger 2 - хороший цикл статей (****)
- Dagger 2 - еще один хороший цикл статей (****)
- Toothpick (**)
- Видео-лекция Яндекса: Школа мобильной разработки – MyFirstApp (Часть 2). Роман Григорьев Описывает флаги запуска активити, говорит о проблеме пересоздания активити в ос Андроид и подходы к созданияю приложения (на активити, на фрагметах, на вьюхах), поднимает проблему пересоздания активити при повороте экрана (**)
4. Многомодульность
- Многомодульность (**)
5. Утечки памяти
- Обзоп системы управления памятью в Android (**)
- Описание принципов работы с памятью. Типичные утечки памяти (**)
- Доклад про GC, Профилирование, Поиск и устранение утечек (**)
Переписать свое приложение, применяя архитектурный подход Clean Architecture. В реализации presentation слоя применить архитектурный паттерн MVP с использованием библиотеки Moxy. Для предоставления зависимостей в соотвествии с техникой DI использовать библиотеку Dagger 2. Для работы с базой данных использовать библиотеку Room. Избегать утечек памяти.
- javarush - Ресурс предлагает базовые задачки, решать их можно только на Java. Так же есть курсы по самой Java, начиная с азов синтаксиса, заканчивая Java Multithreading, так же есть курс по андроиду.
- CodeWars - Ресурс предлагает огромную подборку задач на более чем 20 языках программирования. На codewars вы сможете обсудить задачи с другими игроками, а также посмотреть альтернативные решения. Можно писать на Java и Kotlin.
- HackerRank - Уровень сложности задач на HackerRank чуть выше, чем на CodeWars, попадаются задания, выходящие за рамки базового программирования. Можно развиваться в нескольких областях, включая алгоритмы, математику, SQL, функциональное программирование, AI и многое другое. Можно писать на Java и Kotlin.
- CodinGame - Это платформа для изучения программирования в игровой форме. Управляйте сценарием игры с помощью кода. Большой выбор языков, обучения по фану. В играх есть описание проблемы и тестовые примеры. Определенно стоит попробовать такой подход в обучении. Можно писать на Java и Kotlin.
- Создать репозиторий формата ФАМИЛИЯ_PRACTICE
- Создать ветку формата DD.MM.YYYY
- Решить определенные задачи с сайта CodeWars:
- Решить дополнительно 5 заданий учитывая сложность:
- 2 задания на 8 kyu
- 2 задания на 7 kyu
- 1 задание на 6 kyu
- Для 4го пункта - в классах сохранить ссылки на задание в виде комментария к коду
- Опубликовать решеные результаты в репозитории