Android AsyncTask пример и объяснение
Я хочу использовать AsyncTask
в моем приложении, но у меня возникают проблемы с поиском фрагмента кода с простым объяснением того, как все работает. Я просто хочу, чтобы что-то помогло мне быстро вернуться к скорости, не разбираясь с документацией или множеством вопросов и ответов снова.
1 ответ
AsyncTask
Это один из самых простых способов реализовать параллелизм в Android без необходимости работать с более сложными методами, такими как Threads. Хотя он предлагает базовый уровень параллелизма с потоком пользовательского интерфейса, его не следует использовать для более длительных операций (скажем, не более 2 секунд).
AsyncTask имеет четыре метода для выполнения задачи
onPreExecute()
doInBackground()
onProgressUpdate()
onPostExecute()
где doInBackground()
является наиболее важным, так как именно там, где выполняются фоновые вычисления.
Код:
Вот схема скелета с пояснениями:
public class AsyncTaskTestActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// This starts the AsyncTask
// Doesn't need to be in onCreate()
new MyTask().execute("my string parameter");
}
// Here is the AsyncTask class:
//
// AsyncTask<Params, Progress, Result>.
// Params – the type (Object/primitive) you pass to the AsyncTask from .execute()
// Progress – the type that gets passed to onProgressUpdate()
// Result – the type returns from doInBackground()
// Any of them can be String, Integer, Void, etc.
private class MyTask extends AsyncTask<String, Integer, String> {
// Runs in UI before background thread is called
@Override
protected void onPreExecute() {
super.onPreExecute();
// Do something like display a progress bar
}
// This is run in a background thread
@Override
protected String doInBackground(String... params) {
// get the string from params, which is an array
String myString = params[0];
// Do something that takes a long time, for example:
for (int i = 0; i <= 100; i++) {
// Do things
// Call this to update your progress
publishProgress(i);
}
return "this string is passed to onPostExecute";
}
// This is called from background thread but runs in UI
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
// Do things like update the progress bar
}
// This runs in UI when background thread finishes
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
// Do things like hide the progress bar or change a TextView
}
}
}
Схема потока:
Вот диаграмма, чтобы помочь объяснить, куда идут все параметры и типы:
Другие полезные ссылки:
- Какие аргументы передаются в AsyncTask
? - Slidenerd Android AsyncTask Tutorial: Android Tutorial для начинающих
- Android: почему, когда и как использовать AsyncTask с примером
- Понимание AsyncTask - раз и навсегда
- Работа с AsyncTask и ориентация экрана
- Как передать несколько параметров в AsynkTask
- как передать два разных типа данных в AsyncTask, Android