Cómo utilizar AsyncTask correctamente en Android
No quiero pasar ningún argumento al método doInBackground
de AsyncTask.
Entonces, ¿cómo debería ser el código?
- Servicio v / s AsyncTask
- Encriptación y bloqueo de bases de datos Android
- Async tarea para mostrar un AlertDialog
- Si AsyncTask no es una clase interna ... - algunas preguntas
- ¿Cómo puedo especificar una imagen de marcador de posición?
- Número de conexiones de red en Android
- ¿Por qué mi aplicación utiliza toda la memoria y obtiene OutOfMemoryError: Error al asignar?
- Esperando que ASyncTask termine o que la variable se establezca
- AsyncTask.onCancelled () no se llama después de cancelar (true)
- actualizar el widget android (utilizando tareas asíncronas) con una imagen de Internet
- Cómo pasar datos de AsyncTask a Ui Thread
- ¿Hay una manera de detener la ejecución de un HttpClient en un AsyncTask?
- Android ¿cuántos hilos puedo tener?
import android.app.Activity; import android.app.ProgressDialog; import android.os.AsyncTask; import android.os.Bundle; public class AsyncExample extends Activity{ private String url="http://www.google.co.in"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); new AsyncCaller().execute(); } private class AsyncCaller extends AsyncTask<Void, Void, Void> { ProgressDialog pdLoading = new ProgressDialog(AsyncExample.this); @Override protected void onPreExecute() { super.onPreExecute(); //this method will be running on UI thread pdLoading.setMessage("\tLoading..."); pdLoading.show(); } @Override protected Void doInBackground(Void... params) { //this method will be running on background thread so don't update UI frome here //do your long running http tasks here,you dont want to pass argument and u can access the parent class' variable url over here return null; } @Override protected void onPostExecute(Void result) { super.onPostExecute(result); //this method will be running on UI thread pdLoading.dismiss(); } } }
Según AsyncTask , su
AsyncTask<Params, Progress, Result>
- Params, el tipo de parámetros enviados a la tarea en ejecución.
- Progreso, el tipo de unidades de progreso publicadas durante la computación de fondo.
- Resultado, el tipo de resultado del cálculo de fondo.
Así que si quieres pasar void en doInBackground simplemente pasa vacío en lugar de Params.
Ejemplo de código:
class DownloadLink extends AsyncTask<Void, Void, Void> { @Override protected Void doInBackground(Void... params) { // TODO Auto-generated method stub //Do Your stuff here.. return null; } }
Y lo llaman como:
new DownloadLink().execute();
Cree su clase AsyncTask
como si no desea pasar ningún parámetro a doInBackground
:
public class LongOperation extends AsyncTask<Void, Void, String> { public LongOperation(Context context) { } @Override protected void onPreExecute() { } @Override protected String doInBackground(Void... params) { return null; } @Override protected void onPostExecute(String result) { } }
E iniciar AsyncTask como sin pasar ningún parámetro para ejecutar:
LongOperation longOperation = new LongOperation(this); longOperation.execute();
¿Por qué no quieres pasarle argumentos? Usted debe explicar …
Así es como funciona normalmente (ejemplo):
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)); // Escape early if cancel() is called if (isCancelled()) break; } return totalSize; } protected void onProgressUpdate(Integer... progress) { setProgressPercent(progress[0]); } protected void onPostExecute(Long result) { showDialog("Downloaded " + result + " bytes"); } }
Y para ejecutarlo llamas:
new DownloadFilesTask().execute(url1, url2, url3);
Fuente: Android docs