34.50M
Category: softwaresoftware

Технология разработки мобильных приложений. Первое приложение

1.

ТЕХНОЛОГИЯ РАЗРАБОТКИ
МОБИЛЬНЫХ ПРИЛОЖЕНИЙ
Тонких Артём Петрович

2.

Первое приложение

3.

Интерфейс студии и структура проекта

4.

Интерфейс студии и структура проекта. Хранение файлов

5.

Интерфейс студии и структура проекта. Gradle Scripts

6.

Создание и запуск Android эмулятора

7.

Создание стороннего эмулятора

8.

Краткое знакомство с часто встречающимися понятиями

9.

Основные компоненты Android приложения
Application
Activity
Service
AndroidManifest.xml
BroadcastReceiver
ContentProvider

10.

Основные компонены Android. Context
Доступ к ресурсам
Создание файлов
Доступ к системным возможностям
устройства
Динамическое
изменение интерфейса
Источники Context и их различие

11.

Activity и его жизненный цикл
Resumed
(visible)
onResume()
onPause()
onResume()
Paused
(partly visiable)
Started
(visible)
onStart()
onStop()
onStart()
Created
onCreate()
onRestart()
Stopped
(hidden)
onDestroy()
Destroyed

12.

Порядок вызова методов жизненного цикла при запуске дочерней
Activity
Activity 1
Activity 2
onCreate()
onStart()
onResume()
*Запуск второй активити*
onPause()
onCreate()
onStart()
onResume()
onStop()
*возврат назад*
onPause()
onRestart()
onStart()
onResume()
onStop()
onDestroy()

13.

Интерфейс. View и ViewGroup
<ViewGroup>
разметки,
<View/>
<View/>
<ViewGroup>
<View/>
<View/>
</ViewGroup>
</ViewGroup>
//Иерархическая структура
XML правила

14.

Реализация ViewGroup
ViewGroup
TableLayout
LinearLayout
GridLayout
RelativeLayout
FrameLayout
ConstraintLayout

15.

ImageView, EditText
ImageView - основной элемент для показа изображений.
В XML
android:scr=“@drawable/my_image”
B Java
image.setImageResource(R.drawable.my_image);

16.

Система сборки Gradle
Gradle – система автоматической сборки, построенная на
принципах Apache Ant и Apache Maven, но предоставляющая
DSL на языке Groovy вместо традиционной XML-образной
формы представления конфигурации проекта.

17.

Toast

18.

Menu

19.

ContextMenu
Добавление контекстного меню
Обработка нажатия на
контекстное меню

20.

Знакомство с Fragment

21.

Жизненный цикл фрагмента

22.

Формат JSON. Библиотека GSON

23.

Вёрстка экрана логина

24.

Добавление ссылок на View элементы

25.

Валидация email и password. Ошибки в Toast
Запись в .java:
Запись в string.xml:

26.

Верстка экрана профиля

27.

Создание активити профиля

28.

Создание класса User

29.

Создание хост активити для фрагментов

30.

Миграция логики AuthActivity во фрагмент

31.

Миграция логики AuthActivity во фрагмент. Создание AuthActivity

32.

Добавление фрагмента регистрации

33.

Создание класса PreferenceHelper

34.

Логика авторизации

35.

Логика авторизации. Работа с бэкстеком

36.

Экран профиля

37.

Экран профиля. Логаут, меню

38.

Обновлённая логика авторизации

39.

Экран профиля

40.

Экран профиля. Извлечение изображения из галереи

41.

Градиентный фон

42.

Многопоточность
Процесс – глобальная сущность, выделенные ресурсы.
Поток – внутренняя сущность процесса, выполняет
программный код.
Проблемы многопоточности:

43.

Что с Android?
Пользователь
нажал на кнопку
Запрос
передается
в фоновый
поток
Запуск
фонового
потока
Показ
результата
Загрузка
Сетевой
запрос
BG
TH read
Результат
передается
в главный
поток
Завершение
фонового
потока
UI
TH read

44.

Обзор инструментов для обеспечения многопоточности в Java
(Thread, Runnable)

45.

Обзор инструментов для обеспечения многопоточности в Java
(Callable, Future, Executors)

46.

Обзор инструментов для обеспечения многопоточности в Android
(IntentService + BroadcastReceiver, HaMeR, AsyncTask, Loaders)
•Service + BroadcastReceiver
•AsyncTask
•HandlerThread / HaMeR
•Loaders

47.

Знакомство с Service, IntentService
Foreground-service
Background-service
Bound-service

48.

Жизненный цикл Service
Call to
startService()
Call to
bindService()
onCreate()
onCreate()
onStartCommand()
onBind()
Service
running
Clients are
bound to
service
The service is stopped
by itself or a client
Active
LifeTime
The service is stopped
by itself or a client
onUnBind()
onDestroy()
onDestroy()
Service
shut down
Service
shut down
Inbounded
service
Bounded
service

49.

Знакомство с Service, IntentService

50.

Создание Service. Создание кнопок

51.

BroadcastReceiver, знакомство
Дополнительные возможности:
•sendOrderedBroadcast()
•LocalBroadcastManager.sendBroadcast()
•LocalBroadcastManager.registerReceiver()

52.

Создание BroadcastReceiver

53.

Связка Activity-Service-BroadcastReceiver

54.

Связка BroadcastReceiver-Activity

55.

Показ Notification

56.

BroadcastReceiver в манифесте

57.

AsynсTask, знакомство
1)
4)
1) Интерфейс AsyncTask
2) DownloadImageTask
3) Код getBitmap()
4) В Activity.onCreate()
5) Утечка Context
2)
5)
6) Избавляемся от утечки
3)
6)

58.

AsynсTask, знакомство
5) Утечка Context
5)
6) Избавляемся от утечки
7) В Activity
6)
7)

59.

HaMeR. О процессах и потоках
Первый поток, запущенный в процессе, называется главным
потоком.
Главный поток – main thread – UI thread – в контексте Android
синонимы.

60.

MainThread не уничтожается сам
Почему MainThread не умирает?
Что делает Looper?
Что такое MessageQueue?
Как сообщения попадают в MessageQueue?
Кто обрабатывает сообщения?

61.

HaMeR = Handler + Message + Runnable
Looper
0
Message
1 2 …

n
Target:
to Handler 2
Message
Handler 2
Handler 1
Обрабатывает
сообщение
Постит сообщение
в очередь

62.

Handler

63.

Loader
onLoaderReset(Loader<D>)
onCreateLoader(int, Bundle)
onLoadFinished(Loader<D>, D)

64.

ContentProvider
ContentProvider – механизм, который инкапсулирует доступ к
данным, дополнительно позволяя обращаться к ним из разных
процессов.
Телефонная книга
Календарь
•Чаты
•Органайзеры
•Банки
•Почта
Мультимедиа
•Чаты
•Плееры

65.

Экраны со списками

66.

Обзор ListView

67.

GridView

68.

ListView + GridView vs RecyclerView. Основные отличия

69.

RecyclerView. Практика

70.

Работа с RecyclerView (Тонких Артём Петрович). Часть 1
1)
2)
3)
4)
5)
6)
7)
8)

71.

Работа с RecyclerView (Тонких Артём Петрович), часть 2
1)
3)
4)
5)
2)
6)
7)

72.

Добавление SwipeRefreshLayout

73.

Добавление ContentProvider, CursorLoader, показ контактов
в
RecyclerView
1)
2)
3)
4)
5)

74.

Обработка нажатий на элементы списка

75.

Добавление декораторов
1 метод
2 метод

76.

Чтение данных из assets/raw
response.getGlossary().getTitle()

77.

Runtime Permissions

78.

Запрос Runtime Permissions
Создание запроса
Вызов запроса
Показ запроса

79.

Проектирование БД на бумаге
Songs
AlbumsSongs

Название
Тип переменной

Название
Тип переменной
1
id
численный
1
id
численный
2
name
строковый
2
album_id
численный
3
duration
строковый
3
song_id
численный
Comments
Albums

Название
Тип переменной
1
id
численный
2
name
строковый
3
release_date
строковый

Название
Тип переменной
1
id
численный
2
album_id
численный
3
text
строковый
4
author
строковый
5
timestamp
дата

80.

Добавление и доступ БД

81.

Создание Room базы

82.

Сохранение и извлечение данных с Room

83.

Добавление контент провайдера над Room

84.

Что такое сервер

85.

Что такое HTTP?
Методы HTTP-запроса
•GET – получить
•POST – создать
•PUT – обновить
•DELETE – удалить
•PATCH – обновить запись

86.

Что такое OkHttp?
Основные запросы OkHttp:
1. Пул соединений;
2. Gziping;
3. Кэширование;
4. Восстановление после сетевых ошибок;
5. Редиректы;
6. Повторы;
7. Поддержка синхронных и асинхронных вызовов;
8. Interceptors.

87.

OkHttp. Interceptors

88.

OkHttp. Как работает?

89.

Регистрация c помощью OkHttp3

90.

Создание ApiUtils

91.

Авторизация с помощью OkHttp3

92.

Знакомство с Retrofit2
Основные возможности Retrofit:
•Вся сила OkHttp;
•API Interfaces;
•Call Adapters;
•Converters;
•Задание параметров URL и поддержка запроса;
•Преобразование объектов в тело запроса;
•Многостраничный запрос и загрузка файлов.

93.

Знакомство с Retrofit2. Как работает?

94.

Добавление и инициализация Retrofit2 в проект

95.

Добавление Gson конвертера для Retrofit2

96.

Создание интерфейса API в проекте

97.

Регистрация c помощью Retrofit
Переходим в mOnRegistrationClickListener и стираем
Переделываем в

98.

Добавление в проект RecyclerView, Adapter, Holder и получение
списка альбомов

99.

Добавление экрана детального отображения альбома

100.

Знакомство с RxJava2
Тип
Описание
Flowable<T>
Излучает 0 или n элементов и завершается с успехом или ошибкой. Поддерживает
backpressure, с его помощью можно контролировать, как быстро источник испускает
элементы.
Observable<T>
Излучает 0 или n элементов и завершается с успехом или ошибкой. Не поддерживает
Backpressure
Single<T>
Излучает либо один элемент, либо событие ошибки. Реактивная версия вызова метода
Maybe<T>
Успешно с о элементом, или без элемента, или без ошибок. Реактивная версия типа
Optional
Completable
Либо завершается с успехом, либо с событием ошибки. Он никогда не излучает
элементы. Реактивная версия типа Runnable

101.

Инициализация RxJava2. Добавление Call Adapter. Обновление
регистрации
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe()

102.

Получение альбомов с сервера с помощью RxJava2

103.

Обновление проекта для работы с объектами без ""data""
обертки

104.

Объединение БД модели и view модели альбома в одну
сущность

105.

Логика сохранения и получения альбомов с помощью Room

106.

Зачем нужна архитектура? Что такое бизнес-логика?
Бизнес-логика (бизнес-правила) – это то, что делает
приложение.
Описание бизнес-логики не требует значительных
технических знаний.
Бизнес-правила одного и того же приложения на различных
платформах должны быть максимально идентичны.

107.

Смешивание отображения и логики

108.

MVC
Тонких Артём Петрович в 1978-79 гг.
― Model – бизнес-логика
―View – отображение
―Controller – обработка ввода
View!=android.view.View

109.

Принципы SOLID

110.

Обзор MVP (Model-View-Presenter)
Model – данные и методы их получения, сохранения,
обработки
View – визуальное представление данных, экран
Presenter – получение данных, управление отображением
Плюсы:
―возможность модульного тестирования
―упрощение написания и понимания кода
Минусы:
―увеличение кодовой базы

111.

Схема взаимодействия
Действие пользователя
События
GUI
View
-presentor
Обновление вида
Событие изменения модели
Presenter
-model
-IView
Model
Изменение модели

112.

Создание базовых классов MVP

113.

MVP в ProjectsFragment

114.

Что нам даёт Moxy?
Presenter
View
View State
View
Commands
Model

115.

Стандартные стратегии
AddToEndStrategy
AddToEndSingleStrategy
SingleStateStrategy
SkipStrategy
OneExecuteStrategy

116.

Обзор MVVP (Model-View-ViewModel)
Model – данные и методы их получения, сохранения,
обработки
View – визуальное представление данных, экран
ViewModel – абстракция представления, прослойка между
View и Model

117.

ViewModel. Схема взаимодействия. Двухстороннее
связывание

118.

Плюсы и минусы MVVM
Плюсы:
• Компоненты слабо связаны;
• Databinding уменьшает количество кода;
• Несколько View → одна ViewModel.
Минусы:
• Показ Toast и диалогов
• Показ анимаций или данных с задержкой;
• Необходимость обработки команды во View.

119.

Обзор DataBinding Library

120.

Возможности разметки

121.

Обработка нажатий – ссылка на метод и привязка Listener

122.

Собственные атрибуты. Observable Objects

123.

Behancer на MVVM. VM для list item

124.

Выделение логики обновления в RefreshActivity

125.

Добавление кастомных атрибутов

126.

Настройка Databinding

127.

Обзор Android Architecture Components

128.

ViewModel

129.

Добавление архитектурных компонентов

130.

Тонких Артём Петрович
Тонких Артём Петрович

131.

Dependency Inversion Principle
•Модули верхних уровней не должны зависеть от модулей
нижних уровней
•Абстракции не должны зависеть от деталей
Классы должны зависеть от абстракций

132.

Inversion of Control
Инверсия управления – это принцип проектирования, в
котором части программы получают поток управления из
какого-либо общего фреймворка

133.

Цели IoC
Отделение вызова от реализации задачи
Концентрация на самой задаче, а не на обработке вызова
Отсутствие допущений о том, как система работает внутри,
использование вместо этого общепринятых контрактов
Предотвращение сайд-эффектов от замены модуля

134.

Реализация IoC
―Dependency Injection
―Service Locator
―Контекстуальный список
―Паттерн «Абстрактная фабрика»
―Паттерн «Стратегия»

135.

Dependency Injection
ID-контейнер – класс или библиотека, которая занимается
только тем, что готовит зависимости для других классов
Внедрение зависимости – это техника программирования, в
которой один объект (контейнер) снабжает зависимостями
(сервисами) другие объекты (клиентов)
Пример:
Решение:

136.

Какие вопросы решает DI?
Как сделать работу класса независимой от того, как были
созданы его зависимости?
Как перенести сборку зависимостей в отдельные
конфигурационные файлы?
Как сделать несколько различных конфигураций для
приложения?
Как сделать всю работу приложения независимой от того, как
были созданы его компоненты?

137.

Типы внедряемых зависимостей
Constructor Injection – внедрение через конструктор
обязательной зависимости
Property (Setter) Injection – переопределение через сеттер
необязательной зависимости
Method Injection – передача в метод зависимости, которая
пользуется только в этом методе

138.

Плюсы и минусы DI
Плюсы:
•Выбор реализации
•Независимое тестирование
•Слабая связность кода
•Параллельная разработка функциональности
Минусы:
•Сложность отладки из-за разделения мест и использования
компонентов
•Зависимость приложения от фреймворка для внедрения
зависимости

139.

Service Locator vs DI

140.

Service Locator vs DI. Различие в возможностях использования

141.

О графе зависимостей

142.

Добавление Dagger2 в проект.
Модули

143.

Qualifier
Scopes
Gagger2 – сложная в освоении и
понимании библиотека, что,
однако, не мешает ей
распространяться в Android
разработке

144.

Тонких Артём Петрович

145.

Тонких Артём Петрович
•Entities – Сущности
•Use Cases – Методы использования
•Interface Adapters – Интерфейс-Адаптеры
•Frameworks and Drivers – Место скопления деталей

146.

Тонких Артём Петрович
•Быть тестируемой
•Не зависеть от UI
•Не зависеть от БД
•Не зависеть от внешних фреймворков и библиотек
•Не зависеть от какого-либо внешнего сервиса

147.

Реализация

148.

Interactors

149.

Плюсы и минусы Clean Architecture
Плюсы:
Минусы
1.Модульное разделение;
1.Громоздкость;
2. Правило зависимостей;
2.Порог вхождения.
3. Тестирование;
4. Наличие Domain слоя;
5. Использовать любой понравившийся
вам MV-паттерн для UI-слоя;
6. Кастомизация;
7. Хорошее комьюнити;
8. Гайды и богатая база исходных кодов с
примерами.

150.

Итоги
Когда использовать Clean Architecture?
•Много бизнес-логики
•Действительно большое приложение
•Необходимо качественное покрытие тестами
•Постоянный рост или нужен задел на будущее
•Планируется мультиплатформа
Когда следует воздержаться?
•Простое приложение в котором практически нет логики
English     Русский Rules