![]() |
|
Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android |
«
Tema Anterior
|
Siguiente tema
»
|
Herramientas |
#1
|
||||
|
||||
java.util.concurrent.RejectedExecutionException:
Tengo problemas al obtener unos logotipos.
mi código es este: Código:
public class Descarga_Img extends AsyncTask<String, Integer, Bitmap>{ @Override protected Bitmap doInBackground(String... params) { // TODO Auto-generated method stub try { HttpGet web = new HttpGet(params[0]); HttpClient httpClient = new DefaultHttpClient(); HttpResponse response = (HttpResponse) httpClient.execute(web); HttpEntity entity = response.getEntity(); BufferedHttpEntity bufferedHttpEntity = new BufferedHttpEntity( entity); InputStream inputStream = bufferedHttpEntity.getContent(); Bitmap loaded = BitmapFactory.decodeStream(inputStream); return loaded; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override protected void onPreExecute() { // TODO Auto-generated method stub super.onPreExecute(); } @Override protected void onPostExecute(Bitmap result) { // TODO Auto-generated method stub logo = result; super.onPostExecute(result); } } Código:
07-03 10:21:25.737: W/System.err(29786): java.util.concurrent.RejectedExecutionException: Task android.os.AsyncTask$3@41bfc898 rejected from java.util.concurrent.ThreadPoolExecutor@41855248[Running, pool size = 9, active threads = 9, queued tasks = 128, completed tasks = 21] 07-03 10:21:25.737: W/System.err(29786): at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2011) 07-03 10:21:25.737: W/System.err(29786): at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:793) 07-03 10:21:25.737: W/System.err(29786): at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1339) 07-03 10:21:25.737: W/System.err(29786): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:590) 07-03 10:21:25.737: W/System.err(29786): at android.os.AsyncTask.execute(AsyncTask.java:535) 07-03 10:21:25.737: W/System.err(29786): at com.cosmo.basededatosempresa.Empresa.seturl_logo(Empresa.java:162) 07-03 10:21:25.737: W/System.err(29786): at com.cosmo.basededatosempresa.IntentEmpresas.getEmpresa(IntentEmpresas.java:95) 07-03 10:21:25.737: W/System.err(29786): at com.cosmo.basededatosempresa.IntentEmpresas.tareaLarga(IntentEmpresas.java:136) 07-03 10:21:25.737: W/System.err(29786): at com.cosmo.basededatosempresa.IntentEmpresas.onHandleIntent(IntentEmpresas.java:42) 07-03 10:21:25.737: W/System.err(29786): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65) 07-03 10:21:25.737: W/System.err(29786): at android.os.Handler.dispatchMessage(Handler.java:102) 07-03 10:21:25.747: W/System.err(29786): at android.os.Looper.loop(Looper.java:136) 07-03 10:21:25.747: W/System.err(29786): at android.os.HandlerThread.run(HandlerThread.java:61) |
|
#2
|
||||
|
||||
Ya te lo dice la excepción, el AsyncTask no puede tener más de 128 tareas pendientes y al añadir una nueva la rechaza.
La solución, en vez de lanzar todas las tareas de obtener imágenes de golpe, lanza unas cuantas solo y que cada tarea al terminar arranque una nueva de las que quedan. |
#3
|
||||
|
||||
O usa librerías ya preparadas para ello, como UniversalImageLoader, Picasso o Volley.
Yo he usado las 3 y me quedo con Volley, en primer lugar porque es la librería oficial de Google para tareas de comunicación con HTTP, te despreocupas de usar AsyncTask porque el solo te lo enmascara, vamos, a la hora de programar parece que haces las llamadas de forma síncrona pero en realidad son asíncronas. No sólo vale para imágenes (tiene tareas específicas para ello), vale para cualquier tipo de comunicación HTTP. Y las otras 2, son muy parecidas, pero UIL me ha dado bastantes problemas tontos que Picasso no me ha dado. Aunque insisto que al final he quitado las 2 y sólo uso Volley. Cualquiera de las 3 te hace tareas específicas para imágenes, como cachearlas (si ya la tienes descargada no la vuelve a descargar) y usar un buffer de llamadas para no sobrepasar al ThreadPool. |
#4
|
||||
|
||||
Muchas gracias a los 2 ya probare a ver aunque de momento lo he suprimido para seguir avanzando.
|
Respuesta |
![]() |
||||||
|
«
Tema Anterior
|
Siguiente tema
»
|
|
Hora actual: 22:06:51 (GMT +2)
HTCMania: líderes desde el 2007