2012-07-10 11 views
6

Mi aplicación de Android tiene una AsyncTask personalizada para hacer una llamada de descanso para obtener una lista de objetos. Estoy usando Jackson para convertir mi respuesta en Java y estoy viendo alrededor de 30 llamadas a colecciones de basura cuando mapeo el Json a través de ObjectMapper.readValue(). Curiosamente, si realizo la misma llamada una segunda, tercera, cuarta vez (seleccionando un botón de actualización), solo hay una llamada de GC. ¿Alguna idea de por qué sucede esto en la primera llamada cada vez que inicio mi aplicación de Android?¿Por qué la basura de Android se acumula tantas veces con Jacksons ObjectMapper?

AsyncTask.java

doInBackground() { 

HttpGet request = new HttpGet(url); 
HttpClientUtil.setJsonAccept(request); 
HttpResponse response = httpClient.execute(request); 
HttpEntity responseEntity = new BufferedHttpEntity(response.getEntity()); 

// Call that garbage collect 30+ times the first exectution 
ArrayList<MyObject> responseCollection = mapper.readValue(responseEntity.getContent(), new TypeReference<ArrayList<MyObject>>(){}); 

return responseCollection; 
} 

LogCat salida

07-10 11:05:13.484: D/dalvikvm(5518): GC_CONCURRENT freed 497K, 5% free 14030K/14727K, paused 3ms+4ms 
07-10 11:05:13.484: D/dalvikvm(5518): GC_CONCURRENT freed 497K, 5% free 14030K/14727K, paused 3ms+4ms 
07-10 11:05:13.484: D/dalvikvm(5518): GC_CONCURRENT freed 497K, 5% free 14030K/14727K, paused 3ms+4ms 
... 
+1

El GC en Android es agresiva en general, no tiene necesariamente nada que ver con Jackson. Más información aquí: http://stackoverflow.com/questions/4818869/technical-details-of-android-garbage-collector –

+0

@ChristopherPerry Así que esa parece ser la respuesta, por favor, póngalo y cierre :) – Warpzit

Respuesta

Cuestiones relacionadas