Có ai biết cách phát hành bitmap từ android.view.GLES20DisplayList không. Và tại sao nó giữ chúng sống ngay cả khi bạn làm sạch, hãy nói, ImageView theo cách thủ công? Hoặc có thể có một cách để vô hiệu hóa GLES20DisplayList, cố gắng sử dụng android: hardwareAccelerated = "false" trong AndroidManifest, vẫn không có may mắn.Bản phát hành bitmap từ android.view.GLES20DisplayList
Hình như chỉ ảnh hưởng trong 4,2 (1)
cập nhật: (? Bug) vẻ như bạn không thể vô hiệu hóa khả năng tăng tốc phần cứng trên 4.2.1
đơn giản kiểm tra:
Android manifest:
application ... android:hardwareAccelerated="false"
System.out.println("isHardwareAccelerated: " + mListView.isHardwareAccelerated());
mListView.setLayerType(LAYER_TYPE_SOFTWARE, null);
System.out.println("isHardwareAccelerated: " + mListView.isHardwareAccelerated());
kết quả:
12-06 17:15:27.129: I/System.out(30752): isHardwareAccelerated: true
12-06 17:15:27.129: I/System.out(30752): isHardwareAccelerated: true
Điều này xảy ra vì chúng giữ bitmap cho đến khi chế độ xem bị xóa. Đây là bình luận từ GLES20DisplayList: /* Những danh sách này đảm bảo rằng mọi Bitmap và DisplayLists được ghi bởi một DisplayList được giữ nguyên miễn là DisplayList vẫn còn sống. Các danh sách Bitmap và DisplayList được điền bởi GLES20RecordingCanvas trong các cuộc gọi vẽ thích hợp và được xóa khi bắt đầu một khung vẽ mới hoặc khi khung nhìn được tách ra khỏi cửa sổ. */Về cơ bản bạn cần tách xem để có thể tái chế bitmap/drawable. – vovkab
Tôi đã xóa các chế độ xem trong onStop, bộ nhớ vẫn đang được giữ. (chỉ trên 4.2) –
Trình phân tích bộ nhớ nào hiển thị? Có thể ai đó đang giữ tài liệu tham khảo hoặc ngữ cảnh bị rò rỉ? Cố gắng làm sạch bitmap hoàn toàn từ ImageViews và sau đó tách chế độ xem. – vovkab