SlideShare a Scribd company logo
Event Loop.
Platform Channels
Илья Вирник, Flutter Team Lead
Зачем нам это всё
2
〉Выполнение асинхронного кода, а также многопоточное
программирование в Dart’е радикально отличается от Swift/Kotlin


〉Для разработки полноценных программ необходимо уметь работать с
асинхронным и многопоточным кодом
Зачем нам это всё
3
〉Flutter сам по себе — UI-фреймворк. Многие возможности
операционных систем и смартфонов ему недоступны


〉Для разработки сложных приложений почти всегда необходимо
взаимодействовать с платформой, для этого во Flutter есть специальные
механизмы
О чём будем говорить
Future и что он из себя
представляет
Как устроен Dart Event Loop
Что такое PlatformChannel
Какими бывают PlatformChannel’ы
00 ⎮
01 ⎮
02 ⎮
03 ⎮
Future и что он из себя представляет
00
А также что же там внутри особенного
Что такое Future
6
Класс Future — generic обёртка над результатом выполнения
асинхронной операции


У Future есть 3 состояния:


〉Uncompleted — незавершённое, операция ещё не запущена или в
процессе выполнения


〉Completed with result — операция завершена успешно


〉Completed with error — операция завершена с ошибкой
Как устроен Dart Event Loop
01
И что это вообще за зверь такой
Как устроен Dart Event Loop
8
Dart — однопоточный язык


Главный поток в Dart’е — он же main isolate —


поток, на котором выполняются все задачи,


синхронные и асинхронные
Main Isolate
UI
Как устроен Dart Event Loop
9
Каждый изолят содержит Event Loop — это вечный цикл,


выполняющий все поступающие в изолят задачи


Есть 2 FIFO очереди задач: обычные и microtasks


Очередь microtasks имеет приоритет над обычными и опустошается
первой


Обычная очередь задач начинает выполнять задачи последовательно
после выполнения microtasks
Как устроен Dart Event Loop
10
3 2 1
Event Queue
Event Loop
1.Жест на экране


2.Ввели символ


3.Запустили таймер
IO, gestures, timers, etc.
Как устроен Dart Event Loop
11
Event Queue
Event Loop
В очереди событий есть события
Как устроен Dart Event Loop
12
Event Queue
Event Loop
Еvent Loop забирает


их по одному на выполнение
Как устроен Dart Event Loop
13
Event Queue
Event Loop
Задание выполнено
После завершения переходит к следующему
Как устроен Dart Event Loop
14
Event Queue
Event Loop
Как устроен Dart Event Loop
15
Event Queue
Event Loop
Задание выполнено
Как устроен Dart Event Loop
16
Event Queue
Event Loop
Как устроен Dart Event Loop
17
Event Queue
Event Loop
Задание выполнено
Как устроен Dart Event Loop
18
Event Queue


Пустая
Event Loop
Ожидаем следующие события
А что с Future?
Как устроен Dart Event Loop
20
Future instance
Event Loop
Uncompleted State
Как устроен Dart Event Loop
21
Event Loop
Event Queue


Пустая
Completed with Result Completed with Error
Future instance
Or
Что такое Future
22
Пример синхронного и асинхронного выполнения операций












〉Источник примера и просто хорошая статья
Как устроен Dart Event Loop
23
Dart — многопоточный язык


В общем случае в приложении на Dart


может быть несколько изолятов
Custom
Custom
Custom Task


Messa
Main
UI
Как устроен Dart Event Loop
24
Isolate/изолят — поток в Dart’е


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


Каждый изолят имеет собственный Event Loop


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


Создание изолята — достаточно дорогая операция, не стоит этим
злоупотреблять
Как там дела с изолятами
Как устроен Dart Event Loop
26
Почитать дома
Что такое PlatformChannel
03
И с чем его едят
Механизм взаимодействия


платформоспецифичного


кода и Dart кода
Platform Channel
29
Двусторонний канал связи Dart <=> Native


Вызовы асинхронны


Каждый канал должен иметь уникальный идентфикатор
Какими бывают PlatformChannel’ы
04
И как с ними работать
BinaryMessenger
31
Byte Buffer payload


Обязательный ответ (хотя бы null)
BasicMessageChannel
32
Под капотом BinaryMessenger
BasicMessageChannel
33
Под капотом BinaryMessenger


Умеют в базовые типы при помощи codec’ов
MethodChannel
34
Всё так же BinaryMessenger
MethodChannel
35
Всё так же BinaryMessenger


Тоже использует codec MethodCall
MethodChannel
36
Plugin MethodChannel Native
Flutter App
Вызываем через MethodChannel
Event Channel
38
Канал передачи потока событий из натива во Flutter


Работает как обычный Dart Stream
Стримим в EventChannel
А если хочу встроить вьюху?
Platform View
41
Платформенная View оборачивается во Flutter Widget и встраивается
как обычный виджет в дерево


Весь жизненный цикл View и её перерисовки при этом происходят на
стороне платформы


View может занимать любую часть экрана, одновременно их может
быть несколько
Встраиваем вьюхи
Вместо итога
Что почитать
44
Про Dart Event Loop и Isolates


Про Platform Channels, документация


Дока про создание плагина


Большая статья про Platform Channels и их устройство под капотом


Создание платформенной вью во Флаттере раз,


Создание платформенной вью два


Pigeon


Документация по работе с FFI
Q&A
Илья Вирник
i-virnik@yandex-team.ru

More Related Content

What's hot

SAP Logistics Execution Consultant Cv
SAP Logistics Execution Consultant CvSAP Logistics Execution Consultant Cv
SAP Logistics Execution Consultant Cv
fintry
 
1. img mm oms2 determinar caracteristicas do tipos de materiais
1. img mm oms2 determinar caracteristicas do tipos de materiais1. img mm oms2 determinar caracteristicas do tipos de materiais
1. img mm oms2 determinar caracteristicas do tipos de materiais
Consultor SAP MM
 
sap-sd-configuration-guide.pdf
sap-sd-configuration-guide.pdfsap-sd-configuration-guide.pdf
sap-sd-configuration-guide.pdf
sunilkumar595334
 
Fi enhancement technique how-to-guide on the usage of business transaction ...
Fi enhancement technique   how-to-guide on the usage of business transaction ...Fi enhancement technique   how-to-guide on the usage of business transaction ...
Fi enhancement technique how-to-guide on the usage of business transaction ...
Rajeev Kumar
 
Validation and substitution -sap fi advance functions 2019
Validation and substitution -sap fi advance functions 2019Validation and substitution -sap fi advance functions 2019
Validation and substitution -sap fi advance functions 2019
GuangfuDavidLi
 
SAP SD Interview Questions with Explanation
SAP SD Interview Questions with Explanation SAP SD Interview Questions with Explanation
SAP SD Interview Questions with Explanation
Nbhati123
 
Unidad 4 aspectos aduaneros
Unidad 4   aspectos aduanerosUnidad 4   aspectos aduaneros
Unidad 4 aspectos aduanerosRaul Barroso
 
Complementos y extensiones imprescindibles para Google Drive
Complementos y extensiones imprescindibles para Google DriveComplementos y extensiones imprescindibles para Google Drive
Complementos y extensiones imprescindibles para Google Drive
Paco Armero
 

What's hot (9)

SAP Logistics Execution Consultant Cv
SAP Logistics Execution Consultant CvSAP Logistics Execution Consultant Cv
SAP Logistics Execution Consultant Cv
 
1. img mm oms2 determinar caracteristicas do tipos de materiais
1. img mm oms2 determinar caracteristicas do tipos de materiais1. img mm oms2 determinar caracteristicas do tipos de materiais
1. img mm oms2 determinar caracteristicas do tipos de materiais
 
sap-sd-configuration-guide.pdf
sap-sd-configuration-guide.pdfsap-sd-configuration-guide.pdf
sap-sd-configuration-guide.pdf
 
Fi enhancement technique how-to-guide on the usage of business transaction ...
Fi enhancement technique   how-to-guide on the usage of business transaction ...Fi enhancement technique   how-to-guide on the usage of business transaction ...
Fi enhancement technique how-to-guide on the usage of business transaction ...
 
Ley 7 de 1991
Ley 7 de 1991Ley 7 de 1991
Ley 7 de 1991
 
Validation and substitution -sap fi advance functions 2019
Validation and substitution -sap fi advance functions 2019Validation and substitution -sap fi advance functions 2019
Validation and substitution -sap fi advance functions 2019
 
SAP SD Interview Questions with Explanation
SAP SD Interview Questions with Explanation SAP SD Interview Questions with Explanation
SAP SD Interview Questions with Explanation
 
Unidad 4 aspectos aduaneros
Unidad 4   aspectos aduanerosUnidad 4   aspectos aduaneros
Unidad 4 aspectos aduaneros
 
Complementos y extensiones imprescindibles para Google Drive
Complementos y extensiones imprescindibles para Google DriveComplementos y extensiones imprescindibles para Google Drive
Complementos y extensiones imprescindibles para Google Drive
 

Similar to Dart event loop; platform channels

Олег Антонян
Олег АнтонянОлег Антонян
Олег Антонян
ForkConf
 
Programming Guide
Programming GuideProgramming Guide
Programming Guide
guest63e09c
 
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
Cisco Russia
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Yauheni Akhotnikau
 
Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"
OdessaJS Conf
 
Лекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GILЛекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GIL
Roman Brovko
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language Runtime
SQALab
 
Evgeny Rybak Presentation
Evgeny Rybak PresentationEvgeny Rybak Presentation
Evgeny Rybak Presentationsef2009
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS
Pavel Tsukanov
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
Roman Dvornov
 
Стек протоколов для IoT. Пример использования SNMP
Стек протоколов для IoT. Пример использования SNMPСтек протоколов для IoT. Пример использования SNMP
Стек протоколов для IoT. Пример использования SNMP
Intersog
 
IoT Conf UA 2016
IoT Conf UA 2016IoT Conf UA 2016
IoT Conf UA 2016
Oleksandr Kovalenko
 
IoT Protocols #iotconfua
IoT Protocols #iotconfuaIoT Protocols #iotconfua
IoT Protocols #iotconfua
Andy Shutka
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программирование
Python Meetup
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?
etyumentcev
 
Multithreading in go
Multithreading in goMultithreading in go
Multithreading in go
Lohika_Odessa_TechTalks
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладка
Sergey Platonov
 

Similar to Dart event loop; platform channels (20)

Олег Антонян
Олег АнтонянОлег Антонян
Олег Антонян
 
Programming Guide
Programming GuideProgramming Guide
Programming Guide
 
Lirc или домашний медиацентр
Lirc или домашний медиацентрLirc или домашний медиацентр
Lirc или домашний медиацентр
 
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
Сетевой инженер 2.0. Что нужно знать о программируемости в корпоративной сети?
 
Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?Для чего мы делали свой акторный фреймворк и что из этого вышло?
Для чего мы делали свой акторный фреймворк и что из этого вышло?
 
Async Python
Async PythonAsync Python
Async Python
 
Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"
 
Лекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GILЛекция 13. Многопоточность и GIL
Лекция 13. Многопоточность и GIL
 
Dynamic Language Runtime
Dynamic Language RuntimeDynamic Language Runtime
Dynamic Language Runtime
 
Evgeny Rybak Presentation
Evgeny Rybak PresentationEvgeny Rybak Presentation
Evgeny Rybak Presentation
 
ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS ВВЕДЕНИЕ В NODE.JS
ВВЕДЕНИЕ В NODE.JS
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 
Theme 07
Theme 07Theme 07
Theme 07
 
Стек протоколов для IoT. Пример использования SNMP
Стек протоколов для IoT. Пример использования SNMPСтек протоколов для IoT. Пример использования SNMP
Стек протоколов для IoT. Пример использования SNMP
 
IoT Conf UA 2016
IoT Conf UA 2016IoT Conf UA 2016
IoT Conf UA 2016
 
IoT Protocols #iotconfua
IoT Protocols #iotconfuaIoT Protocols #iotconfua
IoT Protocols #iotconfua
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программирование
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?
 
Multithreading in go
Multithreading in goMultithreading in go
Multithreading in go
 
Павел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладкаПавел Довгалюк, Обратная отладка
Павел Довгалюк, Обратная отладка
 

Dart event loop; platform channels