2011-12-03 26 views
5

Tôi đã tạo Hình nền động hiển thị hình động bằng cách lưu trữ 70 hình ảnh trở lên trong một mảng rồi hiển thị chúng một lúc để tạo hoạt ảnh. Tôi đã sử dụng cấu trúc của CubeEngine để thiết kế nó. Đối với hầu hết các phần nó hoạt động.Hình nền động - "Đặt hình nền" - Cần sự kiện để xóa bộ nhớ

Khi lần đầu tiên tôi chọn hình nền, nó sẽ tải mảng và hiển thị hoạt ảnh. Sau đó, khi tôi nhấp vào nút "Đặt hình nền", tôi nhận được một "OutOfMemoryError: kích thước bitmap vượt quá ngân sách VM". Tôi đã thêm các cuộc gọi bitmap.recycle() để cố gắng giải quyết vấn đề này.

Tôi đã đặt Log.d vào tất cả các sự kiện để cố hiểu luồng sự kiện. Những gì nó trông giống như khi nút "Đặt hình nền" được khai thác, dòng chảy đi thẳng đến Constructor.

Sự kiện onDestroy hoặc sự kiện onSurfaceChanged không được kích hoạt, cũng như bất kỳ sự kiện nào khác, ngoại trừ onTouchEvent.

Vì vậy, mảng hình ảnh ban đầu của tôi là trong bộ nhớ và khi nó thực hiện các Constructor nó cố gắng để tải một mảng với hình ảnh và hết bộ nhớ.

Tôi không thể tìm thấy sự kiện để đặt logic vào để xóa mảng ban đầu của mình khi họ nhấp vào nút "Đặt hình nền".

Có cách nào để thêm logic vào nút "Đặt hình nền" hay không có sự kiện nào khác mà tôi có thể thêm vào mã của mình nơi tôi có thể thực hiện việc này?

Tôi đã thấy những người khác gặp sự cố này nhưng chưa thấy giải pháp.

Mọi đề xuất sẽ được đánh giá cao.

Trả lời

0

Nếu bạn muốn thực hiện tải hoặc dỡ, bạn có thể phát hiện khi hiển thị của WallpaperService.Engine thay đổi bằng cách ghi đè trênVisibilityChanged (boolean visible).
Bạn cũng nên Tiếp tục hoặc Tạm dừng GlSurfaceView khi khả năng hiển thị thay đổi.

Bạn có thể tìm thêm thông tin ở đây:
http://developer.android.com/reference/android/service/wallpaper/WallpaperService.Engine.html#onVisibilityChanged(boolean)
http://developer.android.com/reference/android/opengl/GLSurfaceView.html
xem Hoạt động Life-Cycle