Tôi đang cố gắng tìm ra lý do khiến ứng dụng của tôi đang sử dụng quá nhiều bộ nhớ. Tôi thường thấy nó sử dụng từ 15 đến 18MB, cao hơn đáng kể so với tôi mong đợi. Tôi đã xem xét kích thước heap qua DDMS và thấy điều này:Định vị và khắc phục nguyên nhân kích thước heap lớn
Đó nhìn một chút đáng ngờ vì ứng dụng của tôi không đối phó với hình ảnh lớn ở tất cả. Trong thực tế, tổng số tiền ký quỹ trong ứng dụng của tôi là khoảng 250KB. Vì vậy, tôi tạo ra một đống đống và sử dụng MAT để xác định vị trí nơi tất cả bộ nhớ này đã đi. byte [] mảng là cho đến nay người tiêu dùng lớn nhất, vì vậy tôi khoan xuống và nhận thấy như sau:
Tôi hoàn toàn không có ý tưởng tại sao sPreloadedDrawables chịu trách nhiệm cho một kích thước đống giữ lại cao như vậy. Tôi cũng không biết làm thế nào để xác định nguyên nhân gốc rễ, hoặc làm thế nào để 'sửa chữa' nó.
Tôi nên đi đâu từ đây? Ứng dụng của tôi hoạt động chủ yếu trong nền thông qua các dịch vụ không xử lý dữ liệu hình ảnh. Tôi có các Hoạt động mà người dùng có thể chọn sử dụng, nhưng một lần nữa, họ sử dụng các bản vẽ nhỏ không giải thích được kích thước heap lớn như vậy. Tôi cũng đã kiểm tra xem có bất kỳ sự cố rò rỉ nào của Hoạt động hay không, nhưng không xác định được bất kỳ sự cố nào.
EDIT: Tôi nhận thấy rằng kích thước heap thấp hơn đáng kể khi chạy trong trình mô phỏng. Điều này khá khó hiểu. :/
Bạn đang chạy phiên bản Android nào ?. Tôi nhận thấy rằng ICS tải trước các hình ảnh có thể vẽ được, tôi đoán thử một trải nghiệm giao diện người dùng mượt mà hơn và tận dụng giới hạn bộ nhớ VM tăng lên. Vì vậy, nếu điện thoại của bạn là ICS và giả lập của bạn trên 2.X sẽ giải thích sự khác biệt. Cá nhân tôi đã không kiểm tra giả lập chạy 4.X để kiểm tra xem bộ nhớ tăng cao là hiện nay quá (tôi đoán một cái gì đó cho tôi để làm sau này). Nó chắc chắn có trên điện thoại của tôi chạy 4.0.3. – sciutand
Điện thoại của tôi đang chạy Android 4.0.3, như trình mô phỏng. – Glitch
Mật độ/kích thước màn hình nào bạn đang sử dụng trên trình giả lập so với thiết bị? – cistearns