Similar presentations:
Технология разработки мобильных приложений
1.
Разработка мобильныхприложений
Тонких Артём Петрович
2.
Первое приложение3.
Интерфейс студии и структура проекта4.
Интерфейс студии и структура проекта. Хранение файлов5.
Интерфейс студии и структура проекта. Gradle Scripts6.
Создание и запуск 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.
Реализация ViewGroupViewGroup
TableLayout
LinearLayout
GridLayout
RelativeLayout
FrameLayout
ConstraintLayout
15.
ImageView, EditTextImageView - основной элемент для показа изображений.
В XML
android:scr=“@drawable/my_image”
B Java
image.setImageResource(R.drawable.my_image);
16.
Система сборки GradleGradle – система автоматической сборки, построенная на
принципах Apache Ant и Apache Maven, но предоставляющая
DSL на языке Groovy вместо традиционной XML-образной
формы представления конфигурации проекта.
17.
Toast18.
Menu19.
ContextMenuДобавление контекстного меню
Обработка нажатия на
контекстное меню
20.
Знакомство с Fragment21.
Жизненный цикл фрагмента22.
Формат JSON. Библиотека GSON23.
Вёрстка экрана логина24.
Добавление ссылок на View элементы25.
Валидация email и password. Ошибки в ToastЗапись в .java:
Запись в string.xml:
26.
Верстка экрана профиля27.
Создание активити профиля28.
Создание класса User29.
Создание хост активити для фрагментов30.
Миграция логики AuthActivity во фрагмент31.
Миграция логики AuthActivity во фрагмент. Создание AuthActivity32.
Добавление фрагмента регистрации33.
Создание класса PreferenceHelper34.
Логика авторизации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, IntentServiceForeground-service
Background-service
Bound-service
48.
Жизненный цикл ServiceCall 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, IntentService50.
Создание Service. Создание кнопок51.
BroadcastReceiver, знакомствоДополнительные возможности:
•sendOrderedBroadcast()
•LocalBroadcastManager.sendBroadcast()
•LocalBroadcastManager.registerReceiver()
52.
Создание BroadcastReceiver53.
Связка Activity-Service-BroadcastReceiver54.
Связка BroadcastReceiver-Activity55.
Показ Notification56.
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 + RunnableLooper
0
Message
1 2 …
…
n
Target:
to Handler 2
Message
Handler 2
Handler 1
Обрабатывает
сообщение
Постит сообщение
в очередь
62.
Handler63.
LoaderonLoaderReset(Loader<D>)
onCreateLoader(int, Bundle)
onLoadFinished(Loader<D>, D)
64.
ContentProviderContentProvider – механизм, который инкапсулирует доступ к
данным, дополнительно позволяя обращаться к ним из разных
процессов.
Телефонная книга
Календарь
•Чаты
•Органайзеры
•Банки
•Почта
Мультимедиа
•Чаты
•Плееры
65.
Экраны со списками66.
Обзор ListView67.
GridView68.
ListView + GridView vs RecyclerView. Основные отличия69.
RecyclerView. Практика70.
Работа с RecyclerView (Тонких Артём Петрович). Часть 11)
2)
3)
4)
5)
6)
7)
8)
71.
Работа с RecyclerView (Тонких Артём Петрович), часть 21)
3)
4)
5)
2)
6)
7)
72.
Добавление SwipeRefreshLayout73.
Добавление ContentProvider, CursorLoader, показ контактовв
RecyclerView
1)
2)
3)
4)
5)
74.
Обработка нажатий на элементы списка75.
Добавление декораторов1 метод
2 метод
76.
Чтение данных из assets/rawresponse.getGlossary().getTitle()
77.
Runtime Permissions78.
Запрос 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.
Сохранение и извлечение данных с Room83.
Добавление контент провайдера над Room84.
Что такое сервер85.
Что такое HTTP?Методы HTTP-запроса
•GET – получить
•POST – создать
•PUT – обновить
•DELETE – удалить
•PATCH – обновить запись
86.
Что такое OkHttp?Основные запросы OkHttp:
1. Пул соединений;
2. Gziping;
3. Кэширование;
4. Восстановление после сетевых ошибок;
5. Редиректы;
6. Повторы;
7. Поддержка синхронных и асинхронных вызовов;
8. Interceptors.
87.
OkHttp. Interceptors88.
OkHttp. Как работает?89.
Регистрация c помощью OkHttp390.
Создание ApiUtils91.
Авторизация с помощью OkHttp392.
Знакомство с Retrofit2Основные возможности Retrofit:
•Вся сила OkHttp;
•API Interfaces;
•Call Adapters;
•Converters;
•Задание параметров URL и поддержка запроса;
•Преобразование объектов в тело запроса;
•Многостраничный запрос и загрузка файлов.
93.
Знакомство с Retrofit2. Как работает?94.
Добавление и инициализация Retrofit2 в проект95.
Добавление Gson конвертера для Retrofit296.
Создание интерфейса 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.
Получение альбомов с сервера с помощью RxJava2103.
Обновление проекта для работы с объектами без ""data""обертки
104.
Объединение БД модели и view модели альбома в однусущность
105.
Логика сохранения и получения альбомов с помощью Room106.
Зачем нужна архитектура? Что такое бизнес-логика?Бизнес-логика (бизнес-правила) – это то, что делает
приложение.
Описание бизнес-логики не требует значительных
технических знаний.
Бизнес-правила одного и того же приложения на различных
платформах должны быть максимально идентичны.
107.
Смешивание отображения и логики108.
MVCТонких Артём Петрович в 1978-79 гг.
― Model – бизнес-логика
―View – отображение
―Controller – обработка ввода
View!=android.view.View
109.
Принципы SOLID110.
Обзор MVP (Model-View-Presenter)Model – данные и методы их получения, сохранения,
обработки
View – визуальное представление данных, экран
Presenter – получение данных, управление отображением
Плюсы:
―возможность модульного тестирования
―упрощение написания и понимания кода
Минусы:
―увеличение кодовой базы
111.
Схема взаимодействияДействие пользователя
События
GUI
View
-presentor
Обновление вида
Событие изменения модели
Presenter
-model
-IView
Model
Изменение модели
112.
Создание базовых классов MVP113.
MVP в ProjectsFragment114.
Что нам даёт 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 Library120.
Возможности разметки121.
Обработка нажатий – ссылка на метод и привязка Listener122.
Собственные атрибуты. Observable Objects123.
Behancer на MVVM. VM для list item124.
Выделение логики обновления в RefreshActivity125.
Добавление кастомных атрибутов126.
Настройка Databinding127.
Обзор Android Architecture Components128.
ViewModel129.
Добавление архитектурных компонентов130.
Тонких Артём ПетровичТонких Артём Петрович
131.
Dependency Inversion Principle•Модули верхних уровней не должны зависеть от модулей
нижних уровней
•Абстракции не должны зависеть от деталей
Классы должны зависеть от абстракций
132.
Inversion of ControlИнверсия управления – это принцип проектирования, в
котором части программы получают поток управления из
какого-либо общего фреймворка
133.
Цели IoCОтделение вызова от релизации задачи
Концентрация на самой задаче, а не на обработке вызова
Отсутствие допущений о том, как система работает внутри,
использование вместо этого общепринятых контрактов
Предотвращение сайд-эффектов от замены модуля
134.
Реализация IoC―Dependency Injection
―Service Locator
―Контекстуальный список
―Паттерн «Абстрактная фабрика»
―Паттерн «Стратегия»
135.
Dependency InjectionID-контейнер – класс или библиотека, которая занимается
только тем, что готовит зависимости для других классов
Внедрение зависимости – это техника программирования, в
которой один объект (контейнер) снабжает зависимостями
(сервисами) другие объекты (клиентов)
Пример:
Решение:
136.
Какие вопросы решает DI?Как сделать работу класса независимой от того, как были
созданы его зависимости?
Как перенести сборку зависимостей в отдельные
конфигурационные файлы?
Как сделать несколько различных конфигураций для
приложения?
Как сделать всю работу приложения независимой от того, как
были созданы его компоненты?
137.
Типы внедряемых зависимостейConstructor Injection – внедрение через конструктор
обязательной зависимости
Property (Setter) Injection – переопределение через сеттер
необязательной зависимости
Method Injection – передача в метод зависимости, которая
пользуется только в этом методе
138.
Плюсы и минусы DIПлюсы:
•Выбор реализации
•Независимое тестирование
•Слабая связность кода
•Параллельная разработка функциональности
Минусы:
•Сложность отладки из-за разделения мест и использования
компонентов
•Зависимость приложения от фреймворка для внедрения
зависимости
139.
Service Locator vs DI140.
Service Locator vs DI. Различие в возможностях использования141.
О графе зависимостей142.
Добавление Dagger2 в проект.Модули
143.
QualifuerScopes
Gagger2 – сложная в освоении и
понимании библиотека, что,
однако, не мешает ей
распространяться в Android
разработке
144.
Тонких Артём Петрович145.
Теория•Entities – Сущности
•Use Cases – Методы использования
•Interface Adapters – Интерфейс-Адаптеры
•Frameworks and Drivers – Место скопления деталей
146.
User Тонких Артём Петрович•Быть тестируемой
•Не зависеть от UI
•Не зависеть от БД
•Не зависеть от внешних фреймворков и библиотек
•Не зависеть от какого-либо внешнего сервиса
147.
Реализация148.
Interactors149.
Плюсы и минусы Clean ArchitectureПлюсы:
Минусы
1.Модульное разделение;
1.Громоздкость;
2. Правило зависимостей;
2.Порог вхождения.
3. Тестирование;
4. Наличие Domain слоя;
5. Использовать любой понравившийся
вам MV-паттерн для UI-слоя;
6. Кастомизация;
7. Хорошее комьюнити;
8. Гайды и богатая база исходных кодов с
примерами.
150.
ИтогиКогда использовать Clean Architecture?
•Много бизнес-логики
•Действительно большое приложение
•Необходимо качественное покрытие тестами
•Постоянный рост или нужен задел на будущее
•Планируется мультиплатформа
Когда следует воздержаться?
•Простое приложение в котором практически нет логики
software