Ответ 1
Это будет что-то вроде этого
public class TalkToServer extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
/*
* do things before doInBackground() code runs
* such as preparing and showing a Dialog or ProgressBar
*/
}
@Override
protected void onProgressUpdate(Void... values) {
/*
* updating data
* such a Dialog or ProgressBar
*/
}
@Override
protected Void doInBackground(Void... params) {
//do your work here
return null;
}
@Override
protected void onPostExecute(Void result) {
/*
* do something with data here
* display it or send to mainactivity
* close any dialogs/ProgressBars/etc...
*/
}
}
Затем вы можете выполнить его с помощью
TalkToServer myTask = new MyTask(); // can add params for a constructor if needed
myTask.execute(); // here is where you would pass data to doInBackground()
Вам может не понадобиться onProgressUpdate()
или onPreExecute()
, если вы не используете их для показа Dialog
, прогресса или других задач до или после doInBackground()
.
onPreExecute() может использоваться для инициализации и отображения ProgressDialog
. Тогда он может быть отклонен в onPostExecute()
После завершения задачи
onPostExecute()
. Если класс является внутренним классом вашего Activity
, тогда вы можете обновить там теги UI
или вызвать функцию для запуска кода после завершения задачи. Если это отдельный файл, чем Activity
, вы можете использовать interface
и создать callBack
в Activity
и запустить код там, как только закончится выполнение задачи.
В этом ответе говорится об использовании интерфейса для обратного вызова, если вам нужно
Убедитесь, что обновление UI
выполняется любым способом кроме doInBackground()
или отправлено обратно в Activity
в любую функцию, кроме doInBackground()
. Тяжелый подъем, такой как сетевые операции, должен выполняться в doInBackground()
.