SlideShare uma empresa Scribd logo
1 de 20
Baixar para ler offline
Многопоточность.
Работа с сетью.
У каждого android-приложения есть свой
главный поток (UI Thread)
● В нем выполняются операции жизненного цикла activity, отрисовки
интерфейса, обработка событий от пользователя и т.д
● Графический интерфейс является потоко-небезопасным. Попытка
вызвать методы View не из главного потока приводит к исключению
● Если какая-нибудь операция выполняется в главномпотоке более 5
секунд, то появится ANR (Application Not Responding) диалог, с
предложением пользователю убить ваше приложение =(
Начиная с Android 3.0 появился StrictMode, который валит приложение,
если разработчик сделал что-то не так. Полез в интернет из главного
потока? Захотел прочитать файл? Получай исключение!
Мораль
Ни когда не выполняйте долгих операций в главном потоке!
Механизмы для асинхронного поведения
● Thread/Executor т.е все что есть в Java.
● Handler - позволяет работать с очередью сообщений,
ассоциированной с потоком.
● AsyncTask - наверное, самый часто используемый компонент для
создания асинхронного поведения
● Service/IntentService - не имеют ui, работают как фоновые процессы
● Loader - еще один механизм для запуска асинхронных задач,
появился с API level 11
Handler
AsyncTask
Очень часто задача, предполагающая асинхронность выглядит так:
1. Сделать что то в UI потоке, например вывести диалог начала загрузки
2. Начать выполнять задачу в background поток, походу выполнения,
может быть, что-то обновлять в UI потоке (например статус прогресса
загрузки)
3. По завершению загрузки, что-то сделать в UI потоке, например
вывести диалог о удачном завершении задачи.
AsyncTask
AsyncTask
AsyncTask
В зависимости от версии android-а execute() для AsyncTask будет
работать по разному:
● 1.6 < API < 3.2 — на запуск новой AsyncTask будет выделяться новый
поток
● API ≥ 3.2 — на запуск всех AsyncTask используется по умолчанию
один поток, но добавили поле AsyncTask.THREAD_POOL_EXECUTOR
Service
● Появились в API 11 (Android 3.0)
● Привязаны к методам жизненного цикла activity или fragment-а
● Крайне рекомендуется использовать только с cursor-ми (Cursor loader)
Loader
Основные компоненты
● LoaderManager - управляет Loader-ами (создает, уничтожает,
стартует)
● LoaderManager.LoaderCallabacks - интерфейс для связи клиента и
менеджера
● Loader - объект, асинхронно выполняющий задачу
Работа с сетью
● Чаще всего под работой с сетью подразумевают взаимодействие с
REST-подобными сервисами т.е это HTTP + JSON/XML
● Для доступа в сеть в вашем манифесте должен быть прописан
android.permission.INTERNET
● Для отображения web-страниц в вашем приложении можно
использовать WebView - практически полноценный браузер
Стандартные средства
● HttpClient
● HttpUrlConnection
● OkHttp / Retrofit
Типичный use-case
• Создаем HttpClient (DefaultHttpClient или AndroidHttpClient)
• Создаем и настраиваем запрос – объект класса HttpUriRequest (обычно
HttpGet или HttpPost)
• Выполняем запрос HttpClient.execute и получаем в
ответ HttpResponse
• Разбираем HttpResponse – хедеры, строку ответа и т.д.
• Получаем HttpEntity и разбираем тело ответа
HttpClient
HttpUrlConnection
Типичный use-case
• Создаем объект URL, зовем openConnection() и кастуем
к HttpURLConnection
• Подготавливаем запрос – устанавливаем хедеры,
параметры запроса, тип контента и т.д.
• По необходимости подготавливаем тело запроса (POST
запрос). setDoOutput(true) и getOutputStream()
• Читаем ответ сервера. Строку ответа (код, сообщение),
хедеры, cookie и т.д.
• Закрываем соединение и освобождаем все ресурсы
• Ребята из android команды утверждают, что и там и там
есть куча багов
• В android 2.3+ багов меньше в HttpUrlConnection
• В предыдущих версиях – в HttpClient
• О каких именно багах идет речь – да кто бы знал
• С HttpClient’ом приятнее работать
HttpUrlConnection vs HttpClient
● OkHttp - библиотека для работы с http от компании Square.
● Retrofit - библиотека для работы с REST API от компании Square, на
Android по умолчанию использует HttpUrlConnection, но лучше
подключать OkHttp из-за ошибок в последнем.
OkHttp / Retrofit
Проблемы
1. Асинхронность через callback-и очень скоро порождает высокую
степень вложенности (AsyncTask-а в AsyncTask-e), что резко снижает
читабельность и сопровождаемость кода.
2. Кроме REST API, нам также постоянно приходится скачивать картинки
и делать это приходится в adapter-ах к ListView.
3. Почти к любому backend-у необходимо выстраивать кэш на стороне
приложения.
4. Часто результат выполнения сетевых запросов нужен не только в том
месте, откуда они были вызваны
Решения
1. Netflix/rxJava
2. Square/picasso
3. ??? (ORM*, сохранние json/xml в файлы, черт знает что еще)
4. Square/Otto
1. http://www.slideshare.net/andersgoransson/efficient-android-threading -
презентация по асинхронности (лучше этой)
2. http://www.vogella.com/tutorials/AndroidServices/article.html - более
подробно про Service
3. https://github.com/Netflix/RxJava - библиотека для “реактивного”
программирования на Java
4. https://github.com/square/picasso - android библиотека для загрузки
изображений из сети
5. https://github.com/square/retrofit - библиотека для работы с REST API
6. https://github.com/noveogroup/university-android-task6 - примеры по ходу
текущей лекции
7. https://github.com/tttzof351/SmsReader - пример с loader-ом
Что еще почитать/посмотреть?
1. Реализовать экран StudentTaskActivity, показывающий список*
заголовков новостей http://androidtraining.noveogroup.com/news/getAll
2. Пока новости загружаются, пользователю должен быть показан
ProgressDialog
3. Использовать AsyncTask или Service для реализации асинхронного
поведения
4. Формат ответов можно посмотреть http://androidtraining.noveogroup.
com/main/requestFormat
* Можно так же показывать в элементах списка картинки, используя
square/picasso
Задание

Mais conteúdo relacionado

Mais procurados

Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
Platonov Sergey
 
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Ontico
 
Нагрузочное тестирование JMeter Кожухов
Нагрузочное тестирование JMeter КожуховНагрузочное тестирование JMeter Кожухов
Нагрузочное тестирование JMeter Кожухов
Илья Кожухов
 
Android осень 2013 лекция 4
Android осень 2013 лекция 4Android осень 2013 лекция 4
Android осень 2013 лекция 4
Technopark
 

Mais procurados (20)

Multithreading in java past and actual
Multithreading in java past and actualMultithreading in java past and actual
Multithreading in java past and actual
 
Оптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templatesОптимизация трассирования с использованием Expression templates
Оптимизация трассирования с использованием Expression templates
 
Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"
Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"
Артем Розуменко - "Как и зачем разрабатывать собственный фреймворк?"
 
Практика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-серверПрактика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-сервер
 
Everything you wanted to know about writing async, high-concurrency HTTP apps...
Everything you wanted to know about writing async, high-concurrency HTTP apps...Everything you wanted to know about writing async, high-concurrency HTTP apps...
Everything you wanted to know about writing async, high-concurrency HTTP apps...
 
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
Быстрое прототипирование бэкенда игры с геолокацией на OpenResty, Redis и Doc...
 
Practical usage of RxJava 2
Practical usage of RxJava 2Practical usage of RxJava 2
Practical usage of RxJava 2
 
Java 8. Thread pools
Java 8. Thread poolsJava 8. Thread pools
Java 8. Thread pools
 
RDSDataSource: Чистые тесты на Swift
RDSDataSource: Чистые тесты на SwiftRDSDataSource: Чистые тесты на Swift
RDSDataSource: Чистые тесты на Swift
 
Svitla .Net meetup in Kiev, Anzhiiak Oleksii
Svitla .Net meetup in Kiev, Anzhiiak OleksiiSvitla .Net meetup in Kiev, Anzhiiak Oleksii
Svitla .Net meetup in Kiev, Anzhiiak Oleksii
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программирование
 
implementation of 'go'-like language constructions in scala (russian)
implementation of 'go'-like language constructions in scala (russian)implementation of 'go'-like language constructions in scala (russian)
implementation of 'go'-like language constructions in scala (russian)
 
Нагрузочное тестирование JMeter Кожухов
Нагрузочное тестирование JMeter КожуховНагрузочное тестирование JMeter Кожухов
Нагрузочное тестирование JMeter Кожухов
 
Тестирование отклика Web-интерфейса с JMeter и Selenium
Тестирование отклика Web-интерфейса с JMeter и SeleniumТестирование отклика Web-интерфейса с JMeter и Selenium
Тестирование отклика Web-интерфейса с JMeter и Selenium
 
JavaDay'14
JavaDay'14JavaDay'14
JavaDay'14
 
Testing with Selenium
Testing with SeleniumTesting with Selenium
Testing with Selenium
 
Java threads - part 1
Java threads - part 1Java threads - part 1
Java threads - part 1
 
Android осень 2013 лекция 4
Android осень 2013 лекция 4Android осень 2013 лекция 4
Android осень 2013 лекция 4
 
JMeter и OutOfMemory. Исследовательский доклад
JMeter и OutOfMemory. Исследовательский докладJMeter и OutOfMemory. Исследовательский доклад
JMeter и OutOfMemory. Исследовательский доклад
 
Профилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системахПрофилирование кода на C/C++ в *nix системах
Профилирование кода на C/C++ в *nix системах
 

Semelhante a Android - 11 - Multithreading

Android осень 2013 лекция 3
Android осень 2013 лекция 3Android осень 2013 лекция 3
Android осень 2013 лекция 3
Technopark
 
развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)
guest40e031
 
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Servers
rit2010
 
Java весна 2014 лекция 5
Java весна 2014 лекция 5Java весна 2014 лекция 5
Java весна 2014 лекция 5
Technopark
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
Alexey Kachayev
 
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf Conference
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
Ontico
 

Semelhante a Android - 11 - Multithreading (20)

Async Python
Async PythonAsync Python
Async Python
 
Android осень 2013 лекция 3
Android осень 2013 лекция 3Android осень 2013 лекция 3
Android осень 2013 лекция 3
 
развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)
 
антон веснин Rails Application Servers
антон веснин Rails Application Serversантон веснин Rails Application Servers
антон веснин Rails Application Servers
 
Java весна 2014 лекция 5
Java весна 2014 лекция 5Java весна 2014 лекция 5
Java весна 2014 лекция 5
 
Другая виртуализация
Другая виртуализацияДругая виртуализация
Другая виртуализация
 
Асинхронность и сопрограммы
Асинхронность и сопрограммыАсинхронность и сопрограммы
Асинхронность и сопрограммы
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
 
OpenStack - Python Project with 12 Million Lines of code (RUS, Moscow Python ...
OpenStack - Python Project with 12 Million Lines of code (RUS, Moscow Python ...OpenStack - Python Project with 12 Million Lines of code (RUS, Moscow Python ...
OpenStack - Python Project with 12 Million Lines of code (RUS, Moscow Python ...
 
Веб-сервер
Веб-серверВеб-сервер
Веб-сервер
 
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
 
YaC 2013 Notes
YaC 2013 NotesYaC 2013 Notes
YaC 2013 Notes
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
 
Разработка сетевых приложений с gevent
Разработка сетевых приложений с geventРазработка сетевых приложений с gevent
Разработка сетевых приложений с gevent
 
В поисках эффективного middleware
В поисках эффективного middlewareВ поисках эффективного middleware
В поисках эффективного middleware
 
#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов#noBackend, или Как выжить в эпоху толстеющих клиентов
#noBackend, или Как выжить в эпоху толстеющих клиентов
 
мониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBAмониторинг производительности приложения на PINBA
мониторинг производительности приложения на PINBA
 
Async
AsyncAsync
Async
 
Luxoft async.net
Luxoft async.netLuxoft async.net
Luxoft async.net
 
Процессы разработки в Яндексе
Процессы разработки в ЯндексеПроцессы разработки в Яндексе
Процессы разработки в Яндексе
 

Mais de Noveo

Mais de Noveo (20)

Гуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрииГуманитарные специальности в IT-индустрии
Гуманитарные специальности в IT-индустрии
 
Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)Box model, display and position (HTML5 тема 07 - box model, display position)
Box model, display and position (HTML5 тема 07 - box model, display position)
 
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
Ссылки, списки и меню (HTML5 тема 06 - ссылки, списки и меню)
 
Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)Стилизация текста (HTML5 тема 05 - стилизация текста)
Стилизация текста (HTML5 тема 05 - стилизация текста)
 
Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)Семантика текста (HTML5 тема 04 - семантика текста)
Семантика текста (HTML5 тема 04 - семантика текста)
 
Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)Основы CSS (HTML5 тема 02 - основы CSS)
Основы CSS (HTML5 тема 02 - основы CSS)
 
Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)Структура HTML документа (HTML5 тема 01 - структура html документа)
Структура HTML документа (HTML5 тема 01 - структура html документа)
 
Yii2
Yii2Yii2
Yii2
 
Сессии и авторизация
Сессии и авторизацияСессии и авторизация
Сессии и авторизация
 
Rest
RestRest
Rest
 
PHP basic
PHP basicPHP basic
PHP basic
 
PHP Advanced
PHP AdvancedPHP Advanced
PHP Advanced
 
PHP and MySQL
PHP and MySQLPHP and MySQL
PHP and MySQL
 
MySQL
MySQLMySQL
MySQL
 
Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)Push Notifications (Lecture 22 – push notifications)
Push Notifications (Lecture 22 – push notifications)
 
RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)RxJava+RxAndroid (Lecture 20 – rx java)
RxJava+RxAndroid (Lecture 20 – rx java)
 
Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)Работа с соцсетями (Lecture 19 – social)
Работа с соцсетями (Lecture 19 – social)
 
Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)Работа с геоданными (Lecture 18 – geolocation)
Работа с геоданными (Lecture 18 – geolocation)
 
Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)Animations (Lecture 17 – animations)
Animations (Lecture 17 – animations)
 
Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)Toolbar (Lecture 16 – toolbar)
Toolbar (Lecture 16 – toolbar)
 

Último

ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 

Último (9)

Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 

Android - 11 - Multithreading

  • 2. У каждого android-приложения есть свой главный поток (UI Thread) ● В нем выполняются операции жизненного цикла activity, отрисовки интерфейса, обработка событий от пользователя и т.д ● Графический интерфейс является потоко-небезопасным. Попытка вызвать методы View не из главного потока приводит к исключению ● Если какая-нибудь операция выполняется в главномпотоке более 5 секунд, то появится ANR (Application Not Responding) диалог, с предложением пользователю убить ваше приложение =(
  • 3. Начиная с Android 3.0 появился StrictMode, который валит приложение, если разработчик сделал что-то не так. Полез в интернет из главного потока? Захотел прочитать файл? Получай исключение! Мораль Ни когда не выполняйте долгих операций в главном потоке!
  • 4.
  • 5. Механизмы для асинхронного поведения ● Thread/Executor т.е все что есть в Java. ● Handler - позволяет работать с очередью сообщений, ассоциированной с потоком. ● AsyncTask - наверное, самый часто используемый компонент для создания асинхронного поведения ● Service/IntentService - не имеют ui, работают как фоновые процессы ● Loader - еще один механизм для запуска асинхронных задач, появился с API level 11
  • 7. AsyncTask Очень часто задача, предполагающая асинхронность выглядит так: 1. Сделать что то в UI потоке, например вывести диалог начала загрузки 2. Начать выполнять задачу в background поток, походу выполнения, может быть, что-то обновлять в UI потоке (например статус прогресса загрузки) 3. По завершению загрузки, что-то сделать в UI потоке, например вывести диалог о удачном завершении задачи.
  • 10. AsyncTask В зависимости от версии android-а execute() для AsyncTask будет работать по разному: ● 1.6 < API < 3.2 — на запуск новой AsyncTask будет выделяться новый поток ● API ≥ 3.2 — на запуск всех AsyncTask используется по умолчанию один поток, но добавили поле AsyncTask.THREAD_POOL_EXECUTOR
  • 12. ● Появились в API 11 (Android 3.0) ● Привязаны к методам жизненного цикла activity или fragment-а ● Крайне рекомендуется использовать только с cursor-ми (Cursor loader) Loader Основные компоненты ● LoaderManager - управляет Loader-ами (создает, уничтожает, стартует) ● LoaderManager.LoaderCallabacks - интерфейс для связи клиента и менеджера ● Loader - объект, асинхронно выполняющий задачу
  • 13. Работа с сетью ● Чаще всего под работой с сетью подразумевают взаимодействие с REST-подобными сервисами т.е это HTTP + JSON/XML ● Для доступа в сеть в вашем манифесте должен быть прописан android.permission.INTERNET ● Для отображения web-страниц в вашем приложении можно использовать WebView - практически полноценный браузер Стандартные средства ● HttpClient ● HttpUrlConnection ● OkHttp / Retrofit
  • 14. Типичный use-case • Создаем HttpClient (DefaultHttpClient или AndroidHttpClient) • Создаем и настраиваем запрос – объект класса HttpUriRequest (обычно HttpGet или HttpPost) • Выполняем запрос HttpClient.execute и получаем в ответ HttpResponse • Разбираем HttpResponse – хедеры, строку ответа и т.д. • Получаем HttpEntity и разбираем тело ответа HttpClient
  • 15. HttpUrlConnection Типичный use-case • Создаем объект URL, зовем openConnection() и кастуем к HttpURLConnection • Подготавливаем запрос – устанавливаем хедеры, параметры запроса, тип контента и т.д. • По необходимости подготавливаем тело запроса (POST запрос). setDoOutput(true) и getOutputStream() • Читаем ответ сервера. Строку ответа (код, сообщение), хедеры, cookie и т.д. • Закрываем соединение и освобождаем все ресурсы
  • 16. • Ребята из android команды утверждают, что и там и там есть куча багов • В android 2.3+ багов меньше в HttpUrlConnection • В предыдущих версиях – в HttpClient • О каких именно багах идет речь – да кто бы знал • С HttpClient’ом приятнее работать HttpUrlConnection vs HttpClient
  • 17. ● OkHttp - библиотека для работы с http от компании Square. ● Retrofit - библиотека для работы с REST API от компании Square, на Android по умолчанию использует HttpUrlConnection, но лучше подключать OkHttp из-за ошибок в последнем. OkHttp / Retrofit
  • 18. Проблемы 1. Асинхронность через callback-и очень скоро порождает высокую степень вложенности (AsyncTask-а в AsyncTask-e), что резко снижает читабельность и сопровождаемость кода. 2. Кроме REST API, нам также постоянно приходится скачивать картинки и делать это приходится в adapter-ах к ListView. 3. Почти к любому backend-у необходимо выстраивать кэш на стороне приложения. 4. Часто результат выполнения сетевых запросов нужен не только в том месте, откуда они были вызваны Решения 1. Netflix/rxJava 2. Square/picasso 3. ??? (ORM*, сохранние json/xml в файлы, черт знает что еще) 4. Square/Otto
  • 19. 1. http://www.slideshare.net/andersgoransson/efficient-android-threading - презентация по асинхронности (лучше этой) 2. http://www.vogella.com/tutorials/AndroidServices/article.html - более подробно про Service 3. https://github.com/Netflix/RxJava - библиотека для “реактивного” программирования на Java 4. https://github.com/square/picasso - android библиотека для загрузки изображений из сети 5. https://github.com/square/retrofit - библиотека для работы с REST API 6. https://github.com/noveogroup/university-android-task6 - примеры по ходу текущей лекции 7. https://github.com/tttzof351/SmsReader - пример с loader-ом Что еще почитать/посмотреть?
  • 20. 1. Реализовать экран StudentTaskActivity, показывающий список* заголовков новостей http://androidtraining.noveogroup.com/news/getAll 2. Пока новости загружаются, пользователю должен быть показан ProgressDialog 3. Использовать AsyncTask или Service для реализации асинхронного поведения 4. Формат ответов можно посмотреть http://androidtraining.noveogroup. com/main/requestFormat * Можно так же показывать в элементах списка картинки, используя square/picasso Задание