Содержание
- 2. Содержание Асинхронная задача Использование Универсальные типы AsyncТask 4 этапа асинхронной задачи Threading rules Наблюдаемость памяти Версии
- 3. AsyncTask AsyncTask позволяет правильно и легко использовать поток пользовательского интерфейса. Этот класс позволяет выполнять фоновые операции
- 4. Асинхронная задача Асинхронная задача определяется вычислением, которое выполняется в фоновом потоке и результат которого публикуется в
- 5. Использование AsyncTask должен быть разделен на подклассы, чтобы быть использованным. Подкласс переопределит по крайней мере один
- 6. Пример подклассов: private class DownloadFilesTask extends AsyncTask { protected Long doInBackground(URL... urls) { int count =
- 7. Универсальные типы Asynctask Асинхронная задача использует следующие три типа: Params-тип параметров, передаваемых задаче при выполнении. Progress,
- 8. Работа с AsyncTask Напрямую с классом AsyncTask работать нельзя (абстрактный класс), вам нужно наследоваться от него
- 9. Для запоминания можно смотреть на схему.
- 10. Каркас операции private class MyAsyncTask extends AsyncTask { @Override protected Integer doInBackground(String... parameter) { int myProgress
- 11. 4 шага При выполнении асинхронной задачи она проходит 4 этапа: onPreExecute(), вызывается в потоке пользовательского интерфейса
- 12. 4 шага onProgressUpdate (Progress ...), вызывается в потоке пользовательского интерфейса после вызова метода publishProgress (Progress...). Время
- 13. Отмена задачи Задачу можно отменить в любое время, вызвав команду cancel (boolean). Вызов этого метода приведет
- 14. Threading rules Существует несколько правил потоковой передачи, которые необходимо соблюдать для правильной работы этого класса: Класс
- 15. Наблюдаемость памяти AsyncTask гарантирует, что все обратные вызовы синхронизируются, чтобы гарантировать следующее без явных синхронизаций. Эффекты
- 16. Порядок выполнения При первом введении AsyncTasks выполнялись последовательно в одном фоновом потоке. Начиная с Build.VERSION_CODES.DONUT ,
- 17. Кот полез на крышу (А. Климов) Напишем простой пример с использованием названных методов. Предположим, мы хотим
- 18. Создадим новый проект и добавим на экран кнопку, индикатор прогресса и текстовую метку: При щелчке кнопки
- 19. class MainActivity import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import java.util.concurrent.TimeUnit; public class
- 20. class CatTask class CatTask extends AsyncTask { @Override protected void onPreExecute() { super.onPreExecute(); mInfoTextView.setText("Кот полез на
- 21. Комментарий Запустите проект и нажмите на кнопку. Сначала появится текст "Кот полез на крышу", который через
- 23. Summary Nested classes Enum AsyncTask.Status Состояние - текущее состояние задачи Fields public static finalExecutorSERIAL_EXECUTOR An Executor
- 24. Public methods
- 25. Protected methods
- 26. Fields&constructor SERIAL_EXECUTOR Added in API level 11 public static final Executor SERIAL_EXECUTOR Исполнитель, выполняющий задачи по
- 27. public final boolean cancel (boolean mayInterruptIfRunning) Пытается отменить выполнение этой задачи. Эта попытка будет неудачной, если
- 28. public final AsyncTask execute (Params... params) Примечание: эта функция планирует задачу в очереди для одного фонового
- 29. Пример @Override public void onClick(View view) { asyncTask1 = new MyAsyncTask(mProgressBar1); asyncTask1.execute(); asyncTask2 = new MyAsyncTask(mProgressBar2);
- 30. public static void execute (Runnable runnable) Удобен в варианте execute(java.lang.Object) для использования с простым запускаемым объектом.
- 31. public final AsyncTask executeOnExecutor (Executor exec, Params... params) Выполняет задачу с указанными параметрами. Задача возвращает себя
- 32. Пример @TargetApi(Build.VERSION_CODES.HONEYCOMB) private void startAsyncTaskInParallel(MyAsyncTask task) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); else task.execute(); }
- 33. protected abstract Result doInBackground (Params... Params) Переопределите этот метод для выполнения вычисления в фоновом потоке. Указанными
- 34. Пример public class MyAsyncTask extends AsyncTask { private ProgressBar mProgressBar; public MyAsyncTask(ProgressBar target) { mProgressBar =
- 35. protected void onPostExecute (Result result) Выполняется в потоке пользовательского интерфейса после doInBackground(Params...). Указанный результат - это
- 36. protected void onPreExecute () Выполняется в потоке пользовательского интерфейса перед doInBackground(Params...). Вызывается непосредственно execute (Params...) или
- 37. protected void onProgressUpdate (Progress... values) Выполняется в потоке пользовательского интерфейса после вызова publishProgress(Progress...). Указанные значения являются
- 38. protected final void publishProgress (Progress... values) Этот метод может быть вызван из doInBackground (Params...) для публикации
- 40. Скачать презентацию