2012-07-10 6 views
6

Meine Android App verfügt über eine benutzerdefinierte AsyncTask, um einen Restanruf für eine Liste von Objekten zu tätigen. Ich verwende Jackson, um meine Antwort in Java zu konvertieren, und ich sehe etwa 30 Aufrufe von Garbage Collections, wenn ich den Json über ObjectMapper.readValue() abdecke. Interessanterweise gibt es nur einen einzigen GC-Anruf, wenn ich denselben Anruf ein zweites, drittes oder viertes Mal (durch Auswahl einer Aktualisierungsschaltfläche) mache. Irgendwelche Ideen, warum dies beim ersten Anruf jedes Mal passiert, wenn ich meine Android App starte?Warum sammelt Android Müll so oft mit 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 Ausgabe

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

Die GC auf Android ist aggressiv insgesamt, ist es nicht unbedingt etwas mit Jackson zu tun haben. Mehr Infos hier: http://stackoverflow.com/questions/4818869/technical-details-of-android-garbage-collector –

+0

@ChristopherPerry Also das scheint wie die Antwort, bitte legen Sie es und schließen Sie :) – Warpzit

Antwort

Verwandte Themen