Tôi có một Hoạt động mà tôi thề là bộ nhớ bị rò rỉ. Các ứng dụng tôi đang làm việc trên rất nhiều với hình ảnh, vì vậy tôi đã có được khá keo kiệt với bộ nhớ khi làm việc trực tiếp với Bitmap. Tôi đã thêm một hoạt động, và bây giờ nếu bạn sử dụng hoạt động mới này về cơ bản đặt tôi trên cạnh với việc sử dụng mem và tôi kết thúc ném "Bitmap vượt quá ngân sách VM" ngoại lệ. Nếu bạn không bao giờ khởi chạy Hoạt động này, mọi thứ đều mượt mà như trước đây.Android - Rò rỉ bộ nhớ khi tự động xây dựng giao diện người dùng với nguồn tài nguyên hình ảnh
Tôi bắt đầu đọc về rò rỉ bộ nhớ và tôi nghĩ rằng tôi có tình huống tương tự với những gì được mô tả trong bài viết trong tài liệu Android. Tôi đang tạo động một loạt các lượt xem hình ảnh và thêm một BackgroundDrawable từ các tài nguyên và thêm một OnClickListener nữa. Tôi tưởng tượng tôi phải làm một số dọn dẹp khi Activity hits onPause trong vòng đời của nó, nhưng tôi muốn biết cụ thể cách nào là đúng.
Dưới đây là đoạn code mà phải chứng minh các đối tượng Tôi đang làm việc với ...
LinearLayout templateContainer;
.
.
.
ImageView imgTemplatePreview = (ImageView) item.findViewById(R.id.imgTemplatePreview);
.
.
.
imgTemplatePreview.setBackgroundDrawable(getResources().getDrawable(previewId));
imgTemplatePreview.setOnClickListener(imgClick);
templateContainer.addView(item);
bạn đã tìm thấy bất kỳ thông tin nào khác về chủ đề này chưa? Tôi đang làm việc với một chế độ xem duy nhất lật hình ảnh sau khi nút được nhấp và sau nhiều lần khởi động lại ứng dụng, điều hiển nhiên là đang xảy ra đằng sau hậu trường vì tôi đã sử dụng phương thức unbind() và OOM vẫn còn trên tôi do kích thước bitmap vượt quá ... –
Vâng ...điều này đã được đăng cách đây 7 tháng, và tôi đã đi một con đường dài với sự hiểu biết của tôi về Bitmap, bộ nhớ, lỗi OOM, vv Tìm email của tôi thông qua hồ sơ của tôi và tôi sẵn sàng thảo luận, vì đó là cách quá nhiều thông tin cho một bình luận chủ đề. Tóm lại, khi tôi thực sự đẩy các giới hạn, tôi viết một lớp quản lý các bitmap của tôi (trong một số trường hợp, nhiều lớp) và tôi tái chế mọi bitmap khi tôi sử dụng nó. Điều này có thể đơn giản như chỉ giữ một Bitmap duy nhất trong hoạt động của bạn và gọi .recycle trước khi thay thế nó bằng một cá thể mới. Tìm tôi nếu cần, tôi rất vui được thảo luận thêm. – Rich
Hi Rich, tôi nhận ra tất cả chúng tôi đều bận rộn và chia sẻ kiến thức cần có thời gian nhưng tôi cũng sẽ thực sự mô tả một số mô tả sâu sắc hơn về những gì bạn đã thu thập được trong 7 tháng này vì tôi vẫn còn ở tháng 2;) sẽ là bài viết thực sự phổ biến vì nó có vẻ là một câu hỏi tái diễn. Tôi đã đọc bài viết tuyệt vời của Romain nhưng điều đó dường như chỉ là gợi ý về những gì chúng ta cần biết về nguyên nhân gây rò rỉ khi xử lý bitmap ... cuộc gọi .recycle và onClick gây ra rò rỉ không được đề cập ở đó để chắc chắn có các mẹo khác & thủ thuật bị bỏ lỡ bởi công chúng. Cảm ơn, – sradforth