2012-05-24 34 views
6

Khi tôi chuyển sang chế độ ngang, một vài đối tượng được tạo bằng bitmap toàn màn hình.Kích thước bitmap vượt quá lỗi ngân sách Vm android

Khi tôi di chuyển các đối tượng khác được gọi và bitmap của nó sẽ được hiển thị, khi tôi làm điều này nhiều lần, kích thước bitmap vượt vm lỗi ngân sách, tôi đã làm tất cả những điều như recycle(), thiết lập giá trị và sau đó được gọi GC(), tôi vẫn có cùng một lỗi. tạo bitmap ....

bitmap = Bitmap.createBitmap(ChartProperties.getChartWidth(), 
        ChartProperties.getChartHeight(), 
    Bitmap.Config.RGB_565); 

    imageCache.put(String.valueOf(LandscapeChartActivity.getActiveFeature()), 
        new SoftReference(bitmap)); 

    if(imageCache != null){ 

     for (int i = 0; i < imageCache.size(); i++) { 

      if (imageCache.get(String.valueOf(i)) != null) { 
       imageCache.get(String.valueOf(i)).get().recycle(); 
       imageCache.put(String.valueOf(i), null);      
      } 

     } 
     Runtime.getRuntime().gc(); 
     imageCache.clear(); 
     imageCache = null; 
+0

thể trùng lặp của [OutOfMemoryError: kích thước bitmap vượt quá ngân sách VM: - Android] (http://stackoverflow.com/questions/2928002/outofmemoryerror-bitmap-size-exceeds-vm-budget -android) –

+2

Mỗi khi bạn gọi 'size()' trong một vòng lặp, Chúa giết chết một con mèo ... – WarrenFaith

Trả lời

7

Tôi cũng gặp vấn đề tương tự MỘT SỐ vì bitmap.

Khi định hướng thay đổi từ PORTRAIT thành LANDSCAPE và ngược lại, giao diện người dùng trước đó bị hủy hoàn toàn và giao diện người dùng mới được tải và hiển thị, trong trường hợp này nếu bạn đang sử dụng nhiều bitmap trong ứng dụng của mình, bạn cần giải phóng chúng ở những nơi thích hợp.

Để kiểm tra định hướng của điện thoại, vui lòng xem này: Check orientation on Android phone

Trong trường hợp của bạn, bạn cần xóa bitmap trong thay đổi hướng.

Trên liên kết ở trên, bạn có thể tìm thấy, cách lấy hướng hiện tại. Vì vậy, trên mỗi thay đổi định hướng, hãy gọi mã trên của bạn để dọn dẹp các ảnh bitmap.

Bây giờ, khi chúng tôi kiểm tra logcat, luôn luôn có một khúc gỗ đi lên nói GC_, nhưng tôi không thể hiểu rằng, vì vậy Tôi tìm thấy một doc tuyệt vời về vấn đề rò rỉ bộ nhớ: http://codelog.dexetra.com/getting-around-android-memory-blues

Liên kết ở trên là rất hữu ích cho vấn đề của bạn.

Bây giờ, OOME xảy ra khi có rò rỉ bộ nhớ trong ứng dụng của bạn., Để kiểm tra xem, hãy cài đặt MAT cho nhật thực. Bạn có thể tìm thấy nó tại: http://www.eclipse.org/mat/downloads.php

Phần mềm phức tạp của nó một chút nhưng khi bạn trải qua nó, bạn sẽ hiểu, phần mềm khá hữu ích của nó.

Thậm chí nếu điều này không giải quyết được sự cố của bạn, hãy sử dụng WeakReference cho bitmap.

Vui lòng tham khảo liên kết này: How to use WeakReference in Java and Android development?

Nếu tôi nhận biết một số thông tin nhiều hơn, tôi sẽ cập nhật bài đăng này.

Vui lòng cập nhật bài đăng của bạn, nếu bạn nhận được giải pháp cho vấn đề của mình.

Cảm ơn bạn :)

+0

Cảm ơn bạn, Nhưng trong mã của tôi tôi đã rõ ràng bitmap trong khi định hướng thay đổi, nhưng vẫn còn lỗi xảy ra khi lật nhiều lần .. if (imageCache! = null) { cho (int i = 0; i

+0

Có chắc chắn là một rò rỉ bộ nhớ trong ứng dụng của bạn, hãy cài đặt MAT cho nhật thực. Bạn sẽ biết chính xác nơi rò rỉ bộ nhớ hiện diện để bạn có thể khắc phục nó. – Shrikant

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