Асинхронный задача определяется 3 общих типов, называемых Params, Progress and Result
, и 4 этапы, называемые onPreExecute
, doInBackground
, onProgressUpdate
и onPostExecute
.
родовых типов AsyncTask в:
три типа, используемый асинхронной задачей являются следующим:
Params -> the type of the parameters sent to the task upon execution.
Progress -> the type of the progress units published during the background computation.
Result -> the type of the result of the background computation.
Не все типов всегда используется асинхронной задачей. Для того, чтобы пометить тип как неиспользуемые, просто использовать тип Пустоты:
private class MyTask extends AsyncTask<Void, Void, Void> { ... }
AsyncTask и реализует 4 метода:
1. doInBackground: Код выполнения долго выполняющиеся операции идет в этом методе. Когда метод onClick выполняется по нажатию кнопки, он вызывает метод execute, который принимает параметры и автоматически вызывает метод doInBackground с переданными параметрами.
2. onPostExecute: Этот метод вызывается после завершения метода doInBackground. Результат от doInBackground передается этому методу.
3. onPreExecute: Этот метод вызывается до вызова метода DoInBackground.
4. onProgressUpdate: Этот метод вызывается вызовом publishProgress в любое время из doInBackground, вызывающего этот метод.
Overriding onPostExecute, onPreExecute and onProgressUpdate is optional.
Очки помнить:
1. Instance of Async Task needs to be created in UI thread. As shown in onClick method a new instance of LongOperation is created there. Also execute method with parameters should be called from UI thread.
2. Methods onPostExecute, onPreExecute and onProgressUpdate should not be explicitly called.
3. Task can be executed only once.
Давайте посмотрим на примере класса LongOperation, который расширяет AsyncTask ниже: исходный вид печати?
private class LongOperation extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
// perform long running operation operation
return null;
}
/* (non-Javadoc)
* @see android.os.AsyncTask#onPostExecute(java.lang.Object)
*/
@Override
protected void onPostExecute(String result) {
// execution of result of Long time consuming operation
}
/* (non-Javadoc)
* @see android.os.AsyncTask#onPreExecute()
*/
@Override
protected void onPreExecute() {
// Things to be done before execution of long running operation.
//For example showing ProgessDialog
}
/* (non-Javadoc)
* @see android.os.AsyncTask#onProgressUpdate(Progress[])
*/
@Override
protected void onProgressUpdate(Void... values) {
/* Things to be done while execution of long running operation
is in progress.
For example updating ProgessDialog */
}
}
но как я должен знать, что doInBackground должно быть местом, в котором ситуация .. или я могу просто поставить любую ситуацию, а любые другие 2 будут пустыми? Это займет это автоматически? – 2013-04-12 04:23:32
@ user2198192 Что вы пытаетесь выполнить с помощью AsyncTask? –