Mọi người, tôi không nghĩ rằng rằng đây là một bản sao và KHÔNG phải là một trong số đó làm cách nào để tránh các câu hỏi OOMs. Đây là một nhiệm vụ chính thức để tìm hiểu kiến thức, vì vậy hãy giữ các phiếu bầu đó, vui lòng ...Tại sao Android phân bổ bộ nhớ nhiều hơn mức cần thiết khi tải hình ảnh
Hãy tưởng tượng tôi có một số JPEG
của 500x500
pixel. Tôi tải nó dưới dạng ARGB_8888
là "bad as it gets
".
Tôi mong chờ Android để phân bổ 500x500x4 bytes = a little under 1MB
Tuy nhiên, nhìn vào một đống đổ và bạn sẽ thấy rằng Android phân bổ nhiều hơn đáng kể, thường là yếu tố lớn hơn 5-10
lần.
Bạn thường xuyên xem các câu hỏi trên đây về OOMS nơi stack trace cho thấy một heap request of say 15MB
và nó là Luôn lớn hơn nhiều so với yêu cầu đơn giản chỉ để giữ byte của hình ảnh. Các OP thường bắt một số downvotes sau đó là bombarded với câu trả lời chứng khoán và ý kiến về việc sử dụng bộ nhớ ít hơn (nhờ Romain!) Và trong quy mô. Tôi nghĩ rằng có nhiều hơn đáp ứng mắt ở đây.
Bất kỳ ai biết tại sao điều này là?
Nếu không có câu trả lời rõ ràng, tôi sẽ đặt cùng một SSCCE nếu có ích.
PS. Tôi giả định rằng JPEG vs PNG vv là không thích hợp kể từ khi chúng tôi đang nói về việc sử dụng bộ nhớ của bitmap sao lưu mà chỉ đơn giản là x lần y lần BPP - hoặc tôi đang chậm?
Bạn có chắc chắn rằng bạn không làm cho hình ảnh được thu nhỏ theo cách bạn áp dụng nó (ví dụ: tải nó vào một 'ImageView' không cùng kích thước)? Hơn nữa, khi bạn nhìn vào đống rác của bạn, bạn sẽ thấy chính xác nơi các "yếu tố 5-10 lần lớn hơn" phân bổ đã đi - nơi bạn đã thấy những giá trị gió lên? "Tôi sẽ kết hợp SSCCE nếu nó giúp" - làm ơn. – CommonsWare
Ah. Có vẻ như tôi có thể bị chậm. Hãy để tôi thử một ví dụ và quay lại nếu và khi tôi thấy rằng nó không mở rộng quy mô khi áp dụng. Cảm ơn – Simon
Rất kỳ quặc, anh chàng trong [câu hỏi này] (http://stackoverflow.com/questions/4866653/read-in-jpg-as-rgb888-on-android) * muốn * và ARGB8888 nhưng vẫn nhận được RGB565 . Có lẽ bạn có thể sử dụng phương pháp của mình? – GolezTrol