2012-07-10 70 views
6

我的Android應用程序有一個自定義的AsyncTask來爲對象列表做一個休息調用。我使用Jackson將我的響應轉換爲Java,並且在通過ObjectMapper.readValue()映射Json時看到大約30個垃圾收集調用。有趣的是,如果我第二次,第三次,第四次(通過選擇刷新按鈕)進行相同的呼叫,則只有一個GC呼叫。每次啓動我的Android應用程序時,爲什麼會在第一次調用時發生這種情況?爲什麼Android垃圾會使用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的輸出

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

Android上的GC是整體的攻擊性,它並不一定有什麼做與傑克遜。更多信息在這裏:http://stackoverflow.com/questions/4818869/technical-details-of-android-garbage-collector – 2012-07-27 22:47:13

+0

@ChristopherPerry所以,這似乎是答案,請把它放在,並關閉:) – Warpzit 2012-08-15 09:20:33

回答