AsyncTask bloquea el subproceso de UI y muestra la barra de progreso con retardo
Mi AsyncTask está bloqueando el elemento del botón de bloque mientras se muestra la demostración de la imagen y el diálogo de progreso con retardo – sus demostraciones durante un tiempo antes de que se muestre la imagen, pero la descarga tarda mucho tiempo y el botón está bloqueado (naranja) y el diálogo no se muestra.
public Bitmap download(String url, ProgressBar progressbar) throws InterruptedException, ExecutionException { BitmapDownloaderTask task = new BitmapDownloaderTask(progressbar); task.execute(url); return task.get(); } class BitmapDownloaderTask extends AsyncTask<String, Void, Bitmap> { public BitmapDownloaderTask(ProgressBar progressbar) { } @Override protected void onPreExecute() { dialog = new ProgressDialog(ShowActivity.this); dialog.setMessage("Loading"); dialog.setIndeterminate(true); dialog.setCancelable(false); dialog.show(); } @Override protected Bitmap doInBackground(String... Params) { return imageLoader.getBitmap(params[0]); } @Override protected void onPostExecute(Bitmap bitmap) { dialog.dismiss(); } }
En el botón de escucha, simplemente llamar a la función de descarga, el parámetro de progreso es porque tengo el círculo de la barra de progreso en la vista de la imagen – el diálogo es para la prueba sólo, para encontrar por qué hay el retraso y el bloqueo. En otra aplicación uso runable y hilo y elemento no está bloqueado, pero en tutoriales es AsyncTask mencionado como mejor solución para esto.
- Uso de AsyncTask para cargar imágenes en un adaptador personalizado
- ¿Qué argumentos se pasan a AsyncTask <arg1, arg2, arg3>?
- Android - Agregar y mostrar elementos a ListView uno a la vez usando un ArrayAdapter
- AsyncTask clase externa con ProgressDialog
- AsyncTask "Sólo el subproceso original que creó una jerarquía de vista puede tocar sus vistas."
- Android Async tarea ralentizar mi UI Hilo
- Debe crear nuevas tareas asíncronas para cada llamada diferente o utilizar la misma
- Cómo utilizar Runnable.wait () en AsyncTask? ¿Por qué el AsyncTask NO espera ...?
- AsyncTask e IllegalArgumentException
- Error al liberar APK con AsyncTask y Jsoup
- ¿Cómo puedo implementar un AsyncTaskLoader simple?
- Evitar reiniciar fragmento asynctask en cambio de orientación de pantalla
- Cómo utilizar Toast en ASyncTask / onPostExecute con cadena de recursos?
La descarga de imágenes se ejecuta de hecho en el subproceso de fondo, pero con return task.get();
Sólo estás esperando que termine, y eso es lo que está bloqueando tu hilo principal.
Debe utilizar onPostExecute()
como una devolución de llamada para cuando la tarea ha terminado, por lo que no sólo para descartar el diálogo, sino también para hacer lo que necesita con el mapa de bits devuelto por doInBackground()
.
Es porque estás llamando AsyncTask#get
:
Espera si es necesario para completar el cálculo, y luego recupera su resultado.
Debe realizar cualquier operación que necesite para usar la imagen para dentro de onPostExecute()
- Android MotionEvent ACTION_MOVE eficiencia. ¿Cómo mejorar el rendimiento?
- ¿Es posible ejecutar el servicio en la plataforma android de forma continua incluso después de bloquear el dispositivo?