SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Downloaden Sie, um offline zu lesen
Курс по Java/Android
Занятие 14
Александр Русин
e-mail: alexandr.rusin@gmail.com
Android Developer
Thread
●
наследовать Thread
●
реализовать Runnable(полное имя
java.lang.Runnable)
Пример способ 1
class DoSomethingThread extends Thread {
/**
* Здесь можно доопределить, конструктор, статические
поля и т.д.
*/
@Override
protected void run() {
super.run();
// здесь можно что-то делать
}
}
Пример способ 2
class DoSomething implements Runnable {
@Override
protected void run() {
// здесь можно что-то делать
// предка у этого класса нет
}
}
Запуск
DoSomethingThread thread = new DoSomethingThread();
th.start();
//Способ 2:
Thread thread = new Thread(new DoSomething());
thread.start();
Передача управления
другому потоку
class DoTask implements Runnable {
@Override
protected void run() {
while (true) {
/* рабочий код */
yield();
}
}
Sleep
class DoTask implements Runnable {
@Override
protected void run() {
while (true) {
/* рабочий код */
sleep(1000); // спим секунду
}
}
Остановка потока
class StopableTaskOne extends Thread {
private volatile boolean mIsStopped = false;
@Override
protected void run() {
super.run();
mIsStopped = false;
while (!mIsStopped) {
/*рабочий код */
}
}
public void stopThis() {
mIsStopped = true; // текущая итерация - последняя
}
}
Жизненный цикл потока
Жизненный цикл потока
●
Newly Create // между th =‘new Thread();’ и ‘th.start();’;
●
Started Thread (Runnable) // после ‘th.start();’, однако поток не обязан
выполняться в этот самый момент;
●
Started Thread (Running) // в этот самый момент выполняется код в
этом самом потоке;
●
Started Thread (Dead) // метода run исполнился до конца;
●
Blocked // выполняется другой поток, а наш yield(), sleep(), wait().
Cостояния runnable
Остановка потока
class StopableTaskTwo extends Thread {
private volatile boolean mIsStopped = false;
@Override
protected void run() {
super.run();
mIsStopped = false;
while (!mIsStopped) {
try {
/*рабочий код */
sleep(1000);
} catch (InterruptedException ex) {
/* вот теперь все, не смотря на процесс */
}
}
}
public void stopThis() {
mIsStopped = true; // текущая итерация - последняя
this.interrupt(); // и заканчивается она прямо сейчас
}
}
Остановка потока
class StopableTaskTwo extends Thread {
private volatile boolean mIsStopped = false;
@Override
protected void run() {
super.run();
mIsStopped = false;
while (!mIsStopped) {
/* собственно рабочий код */
yield();
if (isInterrupted() {
/* теперь все */
return ;
}
}
}
public void stopThis() {
mIsStopped = true; // текущая итерация - последняя
this.interrupt(); // и заканчивается она прямо сейчас
}
}
Класс Handler
●
dispatchMessage(Message msg) // обработчик системных сообщений
●
dump(Printer pw, String prefix) // дамп
●
handleMessage(Message msg) // обработчик входящих сообщений,
должен переопределятся потомками
●
hasMessages(int what, Object object) // проверяет есть ли не
обработанное сообщение с кодом 'what' и объектом сообщения 'object'
Класс Handler
●
hasMessages(int what) // проверяет есть ли не обработанное сообщение с кодом 'what'
●
Message obtainMessage() // новое сообщение из глобального пула сообщений, есть вариации
метода
●
boolean post(Runnable r) // послать r в очередь сообщений (т.е. выполнить код в потоке, в
котором объект Handle был создан)
●
void removeCallbacks(Runnable r) // удалить все посланные r из очереди сообщений
●
void removeMessages(int what) // удалить сообщение с кодом 'what' из очереди
●
boolean sendMessage(Message msg) // поместить сообщение в конец очереди сообщений
метод runOnUiThread
// снипет подгрузки изображения из интернета и установки его в виджет ImageView
(new Thread(new Runnable() {
@Override
public void run() {
try {
final Bitmap bm = ImageTool.loadBitmap(urlImg);
CompanyView.this.runOnUiThread(new Runnable() {
@Override
public void run() {
ico.setImageBitmap(bm);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
})).start();
Класс AsyncTask
// Шаблон класса использует три типа
●
Params // тип параметров посылаемых
перед запуском задачи;
●
Progress // тип, используемый для
отображения прогресса операции;
●
Result // тип результата задачи;
Класс AsyncTask
●
OnPreExecute() // вызывается в потоке UI
сразу после запуска задачи, на данном этапе
обычно настраивают задачу, например,
показывая индикатор прогресса в UI;
●
doInBackground(Params...) // запускается в
отдельном потоке после завершения
onPreExecute(). На этом этапе вычисляется
результат, который передается методу
onPostExecute;
Класс AsyncTask
●
onProgressUpdate(Progress...) // вызывается в
потоке UI сразу после вызова publishProgress().
Метод используется для отображения прогресса в
пользовательском интерфейсе;
●
onPostExecute(Result) // вызывается в потоке UI
после завершения задачи;
●
execute(Params... params) // выполняет задачу с
указанными параметрами;
●
IsCancelled() // true, если задача была прервана;
●
cancel(boolean mayInterruptIfRunning) // попытка
прервать задачу;
Пример
// пример из документации - загрузка файлов
private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
protected Long doInBackground(URL... urls) {
int count = urls.length;
long totalSize = 0;
for (int i = 0; i < count; i++) {
totalSize += Downloader.downloadFile(urls[i]);
publishProgress((int) ((i / (float) count) * 100));
}
return totalSize;
}
protected void onProgressUpdate(Integer... progress) {
setProgressPercent(progress[0]);
}
protected void onPostExecute(Long result) {
showDialog("Downloaded " + result + " bytes");
}
}
new DownloadFilesTask().execute(url1, url2, url3); // исполнетние task
Повторный запуск
// При повторном запуске задачи система выдаст ошибку
// Cannot execute task: the task has already been executed
// (a task can be executed only once)
at = new DownloadFilesTask();
at.execute(url1, url2, url3);
...
at.execute(url1, url2, url3);
// правильно
at = new DownloadFilesTask();
at.execute(url1, url2, url3);
...
at = new DownloadFilesTask();
at.execute(url1, url2, url3);
метод View.post
TextView tvDescription;
...
tvDescription.setText("example for darkraha.com"));
tvDescription.post(new Runnable() {
@Override
public void run() {
if(tvDescription.getMeasuredHeight() > getCollapsedHeight()){
evDescription.setCollapse();
}
}
});
Домашнее задание
1. Сделать в потоке чтение файла (.txt). Мин
размер файла 1 Мб с progressBar.
2. Загрузка из сети нескольких картинок в
ListView c progressBar.
Литература
1. http://idev.by/android/8729/
2. http://idev.by/android/11239/
3. http://developer.alexanderklimov.ru/android/thread.php
5. http://darkraha.com/rus/mobile/android/api/threads.php
6. http://habrahabr.ru/post/124484/
7. http://www.4stud.info/rtos/lecture2.html
Спасибо за внимание!

Weitere ähnliche Inhalte

Was ist angesagt?

Основы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияОсновы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияbearoff
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Noveo
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.Igor Shkulipa
 
Полный цикл тестирования React-приложений, Алексей Андросов и Наталья Стусь
Полный цикл тестирования React-приложений, Алексей Андросов и Наталья СтусьПолный цикл тестирования React-приложений, Алексей Андросов и Наталья Стусь
Полный цикл тестирования React-приложений, Алексей Андросов и Наталья СтусьMail.ru Group
 
Android осень 2013 лекция 3
Android осень 2013 лекция 3Android осень 2013 лекция 3
Android осень 2013 лекция 3Technopark
 
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с MavenКурс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven7bits
 
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.Igor Shkulipa
 
Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)Vitebsk Miniq
 
Системы контроля версий
Системы контроля версийСистемы контроля версий
Системы контроля версийUnguryan Vitaliy
 
Pundle для менджемента зависимостей в python проектах
Pundle для менджемента зависимостей в python проектахPundle для менджемента зависимостей в python проектах
Pundle для менджемента зависимостей в python проектахMikhail Krivushin
 
Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.Dima Dzuba
 
Usage concurrence in java
Usage concurrence in javaUsage concurrence in java
Usage concurrence in javaAsya Dudnik
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.Igor Shkulipa
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.Unguryan Vitaliy
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersAleksey Fomkin
 
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-выводКурс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-вывод7bits
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикIT61
 

Was ist angesagt? (20)

Основы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрованияОсновы и нюансы параллельного тестрования
Основы и нюансы параллельного тестрования
 
Working with .NET Threads
Working with .NET ThreadsWorking with .NET Threads
Working with .NET Threads
 
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
Многопоточность, работа с сетью (Lecture 12 – multithreading, network)
 
Luxoft async.net
Luxoft async.netLuxoft async.net
Luxoft async.net
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.
 
Полный цикл тестирования React-приложений, Алексей Андросов и Наталья Стусь
Полный цикл тестирования React-приложений, Алексей Андросов и Наталья СтусьПолный цикл тестирования React-приложений, Алексей Андросов и Наталья Стусь
Полный цикл тестирования React-приложений, Алексей Андросов и Наталья Стусь
 
Android осень 2013 лекция 3
Android осень 2013 лекция 3Android осень 2013 лекция 3
Android осень 2013 лекция 3
 
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с MavenКурс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
Курс Java-2016. Занятие 02. Пакеты, сборка проекта с Maven
 
C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.C++ STL & Qt. Занятие 05.
C++ STL & Qt. Занятие 05.
 
Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)Тестируем тесты с PIT (мутационное тестирование)
Тестируем тесты с PIT (мутационное тестирование)
 
Системы контроля версий
Системы контроля версийСистемы контроля версий
Системы контроля версий
 
Pundle для менджемента зависимостей в python проектах
Pundle для менджемента зависимостей в python проектахPundle для менджемента зависимостей в python проектах
Pundle для менджемента зависимостей в python проектах
 
Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.Архитектура. Доступноять программных систем.
Архитектура. Доступноять программных систем.
 
Usage concurrence in java
Usage concurrence in javaUsage concurrence in java
Usage concurrence in java
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.
 
Java. Многопоточность.
Java. Многопоточность.Java. Многопоточность.
Java. Многопоточность.
 
Алексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web WorkersАлексей Фомкин, Практическое применение Web Workers
Алексей Фомкин, Практическое применение Web Workers
 
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-выводКурс Java-2016. Занятие 06. Файлы и ввод-вывод
Курс Java-2016. Занятие 06. Файлы и ввод-вывод
 
REPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчикREPL в Node.js: улучшаем быт разработчик
REPL в Node.js: улучшаем быт разработчик
 
Multithreading in go
Multithreading in goMultithreading in go
Multithreading in go
 

Andere mochten auch (20)

Lec 1
Lec 1Lec 1
Lec 1
 
Scala: что, как и зачем?
Scala: что, как и зачем?Scala: что, как и зачем?
Scala: что, как и зачем?
 
Lec 15
Lec 15Lec 15
Lec 15
 
Lec 5
Lec 5Lec 5
Lec 5
 
Scala for android
Scala for androidScala for android
Scala for android
 
Lec 3
Lec 3Lec 3
Lec 3
 
Lec 6
Lec 6Lec 6
Lec 6
 
Lec 4
Lec 4Lec 4
Lec 4
 
Lec 11
Lec 11Lec 11
Lec 11
 
Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)Under the hood of scala implicits (Scala eXchange 2014)
Under the hood of scala implicits (Scala eXchange 2014)
 
Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013Павел Павлов - Scala для профессионалов - Joker 2013
Павел Павлов - Scala для профессионалов - Joker 2013
 
Scala #2
Scala #2Scala #2
Scala #2
 
Scala magic
Scala magicScala magic
Scala magic
 
Scala #3
Scala #3Scala #3
Scala #3
 
Scala #5
Scala #5Scala #5
Scala #5
 
Scala lecture #4
Scala lecture #4Scala lecture #4
Scala lecture #4
 
Scala training
Scala trainingScala training
Scala training
 
Erlang
ErlangErlang
Erlang
 
Lec 2
Lec 2Lec 2
Lec 2
 
Feature suggester
Feature suggesterFeature suggester
Feature suggester
 

Ähnlich wie Lec 14

JPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profilerJPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profilerAnton Arhipov
 
Асинхронность и сопрограммы
Асинхронность и сопрограммыАсинхронность и сопрограммы
Асинхронность и сопрограммыPlatonov Sergey
 
Принципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.DПринципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.DAndreyGeonya
 
8. java lecture threads
8. java lecture threads8. java lecture threads
8. java lecture threadsMERA_school
 
2012 03 14_parallel_programming_lecture05
2012 03 14_parallel_programming_lecture052012 03 14_parallel_programming_lecture05
2012 03 14_parallel_programming_lecture05Computer Science Club
 
Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.Infinity
 
Кирилл Харьков
Кирилл ХарьковКирилл Харьков
Кирилл ХарьковCodeFest
 
Programming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Programming Java - Lection 06 - Multithreading - Lavrentyev FedorProgramming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Programming Java - Lection 06 - Multithreading - Lavrentyev FedorFedor Lavrentyev
 
Techtalk#8: Design patterns in real life
Techtalk#8: Design patterns in real lifeTechtalk#8: Design patterns in real life
Techtalk#8: Design patterns in real lifeDA-14
 
Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Alex Tumanoff
 
C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.Igor Shkulipa
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobileUA Mobile
 
Исключения и ошибки
Исключения и ошибкиИсключения и ошибки
Исключения и ошибкиUnguryan Vitaliy
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Sergey Platonov
 

Ähnlich wie Lec 14 (20)

JPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profilerJPoint 2016 - Etudes of DIY Java profiler
JPoint 2016 - Etudes of DIY Java profiler
 
Асинхронность и сопрограммы
Асинхронность и сопрограммыАсинхронность и сопрограммы
Асинхронность и сопрограммы
 
Gradle
GradleGradle
Gradle
 
Принципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.DПринципы проектирования S.O.L.I.D
Принципы проектирования S.O.L.I.D
 
Thread
ThreadThread
Thread
 
8. java lecture threads
8. java lecture threads8. java lecture threads
8. java lecture threads
 
2012 03 14_parallel_programming_lecture05
2012 03 14_parallel_programming_lecture052012 03 14_parallel_programming_lecture05
2012 03 14_parallel_programming_lecture05
 
Odd
OddOdd
Odd
 
Groovy presentation.
Groovy presentation.Groovy presentation.
Groovy presentation.
 
Кирилл Харьков
Кирилл ХарьковКирилл Харьков
Кирилл Харьков
 
9 free rtos
9 free rtos9 free rtos
9 free rtos
 
Programming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Programming Java - Lection 06 - Multithreading - Lavrentyev FedorProgramming Java - Lection 06 - Multithreading - Lavrentyev Fedor
Programming Java - Lection 06 - Multithreading - Lavrentyev Fedor
 
Linux Kernel Processes
Linux Kernel ProcessesLinux Kernel Processes
Linux Kernel Processes
 
Techtalk#8: Design patterns in real life
Techtalk#8: Design patterns in real lifeTechtalk#8: Design patterns in real life
Techtalk#8: Design patterns in real life
 
Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2Mike ponomarenko java17-fork-v1.2
Mike ponomarenko java17-fork-v1.2
 
C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.C++ Базовый. Занятие 15.
C++ Базовый. Занятие 15.
 
Асинхронный JavaScript
Асинхронный JavaScriptАсинхронный JavaScript
Асинхронный JavaScript
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
Исключения и ошибки
Исключения и ошибкиИсключения и ошибки
Исключения и ошибки
 
Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++Борис Сазонов, RAII потоки и CancellationToken в C++
Борис Сазонов, RAII потоки и CancellationToken в C++
 

Lec 14

  • 1. Курс по Java/Android Занятие 14 Александр Русин e-mail: alexandr.rusin@gmail.com Android Developer
  • 3. Пример способ 1 class DoSomethingThread extends Thread { /** * Здесь можно доопределить, конструктор, статические поля и т.д. */ @Override protected void run() { super.run(); // здесь можно что-то делать } }
  • 4. Пример способ 2 class DoSomething implements Runnable { @Override protected void run() { // здесь можно что-то делать // предка у этого класса нет } }
  • 5. Запуск DoSomethingThread thread = new DoSomethingThread(); th.start(); //Способ 2: Thread thread = new Thread(new DoSomething()); thread.start();
  • 6. Передача управления другому потоку class DoTask implements Runnable { @Override protected void run() { while (true) { /* рабочий код */ yield(); } }
  • 7. Sleep class DoTask implements Runnable { @Override protected void run() { while (true) { /* рабочий код */ sleep(1000); // спим секунду } }
  • 8. Остановка потока class StopableTaskOne extends Thread { private volatile boolean mIsStopped = false; @Override protected void run() { super.run(); mIsStopped = false; while (!mIsStopped) { /*рабочий код */ } } public void stopThis() { mIsStopped = true; // текущая итерация - последняя } }
  • 10. Жизненный цикл потока ● Newly Create // между th =‘new Thread();’ и ‘th.start();’; ● Started Thread (Runnable) // после ‘th.start();’, однако поток не обязан выполняться в этот самый момент; ● Started Thread (Running) // в этот самый момент выполняется код в этом самом потоке; ● Started Thread (Dead) // метода run исполнился до конца; ● Blocked // выполняется другой поток, а наш yield(), sleep(), wait().
  • 12. Остановка потока class StopableTaskTwo extends Thread { private volatile boolean mIsStopped = false; @Override protected void run() { super.run(); mIsStopped = false; while (!mIsStopped) { try { /*рабочий код */ sleep(1000); } catch (InterruptedException ex) { /* вот теперь все, не смотря на процесс */ } } } public void stopThis() { mIsStopped = true; // текущая итерация - последняя this.interrupt(); // и заканчивается она прямо сейчас } }
  • 13. Остановка потока class StopableTaskTwo extends Thread { private volatile boolean mIsStopped = false; @Override protected void run() { super.run(); mIsStopped = false; while (!mIsStopped) { /* собственно рабочий код */ yield(); if (isInterrupted() { /* теперь все */ return ; } } } public void stopThis() { mIsStopped = true; // текущая итерация - последняя this.interrupt(); // и заканчивается она прямо сейчас } }
  • 14. Класс Handler ● dispatchMessage(Message msg) // обработчик системных сообщений ● dump(Printer pw, String prefix) // дамп ● handleMessage(Message msg) // обработчик входящих сообщений, должен переопределятся потомками ● hasMessages(int what, Object object) // проверяет есть ли не обработанное сообщение с кодом 'what' и объектом сообщения 'object'
  • 15. Класс Handler ● hasMessages(int what) // проверяет есть ли не обработанное сообщение с кодом 'what' ● Message obtainMessage() // новое сообщение из глобального пула сообщений, есть вариации метода ● boolean post(Runnable r) // послать r в очередь сообщений (т.е. выполнить код в потоке, в котором объект Handle был создан) ● void removeCallbacks(Runnable r) // удалить все посланные r из очереди сообщений ● void removeMessages(int what) // удалить сообщение с кодом 'what' из очереди ● boolean sendMessage(Message msg) // поместить сообщение в конец очереди сообщений
  • 16. метод runOnUiThread // снипет подгрузки изображения из интернета и установки его в виджет ImageView (new Thread(new Runnable() { @Override public void run() { try { final Bitmap bm = ImageTool.loadBitmap(urlImg); CompanyView.this.runOnUiThread(new Runnable() { @Override public void run() { ico.setImageBitmap(bm); } }); } catch (Exception e) { e.printStackTrace(); } } })).start();
  • 17. Класс AsyncTask // Шаблон класса использует три типа ● Params // тип параметров посылаемых перед запуском задачи; ● Progress // тип, используемый для отображения прогресса операции; ● Result // тип результата задачи;
  • 18. Класс AsyncTask ● OnPreExecute() // вызывается в потоке UI сразу после запуска задачи, на данном этапе обычно настраивают задачу, например, показывая индикатор прогресса в UI; ● doInBackground(Params...) // запускается в отдельном потоке после завершения onPreExecute(). На этом этапе вычисляется результат, который передается методу onPostExecute;
  • 19. Класс AsyncTask ● onProgressUpdate(Progress...) // вызывается в потоке UI сразу после вызова publishProgress(). Метод используется для отображения прогресса в пользовательском интерфейсе; ● onPostExecute(Result) // вызывается в потоке UI после завершения задачи; ● execute(Params... params) // выполняет задачу с указанными параметрами; ● IsCancelled() // true, если задача была прервана; ● cancel(boolean mayInterruptIfRunning) // попытка прервать задачу;
  • 20. Пример // пример из документации - загрузка файлов private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> { protected Long doInBackground(URL... urls) { int count = urls.length; long totalSize = 0; for (int i = 0; i < count; i++) { totalSize += Downloader.downloadFile(urls[i]); publishProgress((int) ((i / (float) count) * 100)); } return totalSize; } protected void onProgressUpdate(Integer... progress) { setProgressPercent(progress[0]); } protected void onPostExecute(Long result) { showDialog("Downloaded " + result + " bytes"); } } new DownloadFilesTask().execute(url1, url2, url3); // исполнетние task
  • 21. Повторный запуск // При повторном запуске задачи система выдаст ошибку // Cannot execute task: the task has already been executed // (a task can be executed only once) at = new DownloadFilesTask(); at.execute(url1, url2, url3); ... at.execute(url1, url2, url3); // правильно at = new DownloadFilesTask(); at.execute(url1, url2, url3); ... at = new DownloadFilesTask(); at.execute(url1, url2, url3);
  • 22. метод View.post TextView tvDescription; ... tvDescription.setText("example for darkraha.com")); tvDescription.post(new Runnable() { @Override public void run() { if(tvDescription.getMeasuredHeight() > getCollapsedHeight()){ evDescription.setCollapse(); } } });
  • 23. Домашнее задание 1. Сделать в потоке чтение файла (.txt). Мин размер файла 1 Мб с progressBar. 2. Загрузка из сети нескольких картинок в ListView c progressBar.
  • 24. Литература 1. http://idev.by/android/8729/ 2. http://idev.by/android/11239/ 3. http://developer.alexanderklimov.ru/android/thread.php 5. http://darkraha.com/rus/mobile/android/api/threads.php 6. http://habrahabr.ru/post/124484/ 7. http://www.4stud.info/rtos/lecture2.html