2012-07-10 17 views
6

Ứng dụng Android của tôi có AsyncTask tùy chỉnh để thực hiện cuộc gọi còn lại cho danh sách các đối tượng. Tôi đang sử dụng Jackson để chuyển đổi câu trả lời của tôi thành Java và tôi thấy khoảng 30 cuộc gọi thu thập rác khi ánh xạ Json qua ObjectMapper.readValue(). Điều thú vị là, nếu tôi thực hiện cuộc gọi tương tự lần thứ hai, thứ ba, thứ tư (bằng cách chọn nút làm mới), chỉ có một cuộc gọi GC duy nhất. Bất kỳ ý tưởng nào tại sao điều này xảy ra trong lần gọi đầu tiên mỗi khi tôi khởi động ứng dụng Android của mình?Tại sao rác Android thu thập quá nhiều lần với 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 Output

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

GC trên Android là tổng thể tích cực, nó không nhất thiết phải liên quan đến Jackson. Thông tin thêm tại đây: http://stackoverflow.com/questions/4818869/technical-details-of-android-garbage-collector –

+0

@ChristopherPerry Vì vậy, có vẻ như câu trả lời, hãy đặt nó vào và đóng :) – Warpzit

Trả lời

Các vấn đề liên quan