2011-12-03 72 views
5

我創建了一個動態壁紙,通過在數組中存儲70個左右圖像來顯示動畫,然後在創建動畫時顯示一個動畫。我用CubeEngine的結構來設計它。它的大部分工作。動態壁紙 - 「設置壁紙」 - 需要用來清除內存的事件

當我第一次選擇牆紙時,它會加載數組並顯示動畫。然後,當我點擊「設置壁紙」按鈕時,我得到一個「OutOfMemoryError:位圖大小超過虛擬機預算」。我已經添加了bitmap.recycle()調用來嘗試解決此問題。

我已經把Log.d放在所有的事件中去試圖理解事件的流程。看起來像是當點擊「Set Wallpaper」按鈕時,流程直接進入構造器。

不會觸發onDestroy事件或onSurfaceChanged事件,也不會觸發除onTouchEvent之外的任何其他事件。

因此,我的原始圖像數組存儲在內存中,當它執行構造函數時,它會嘗試將另一個數組與圖像一起加載並耗盡內存。

我找不到一個事件來將邏輯放入以清除我的原始數組,當他們單擊「設置壁紙」按鈕時。

有沒有辦法給「設置壁紙」按鈕添加邏輯,或者是否有另一個事件我可以添加到我的代碼,我應該能夠做到這一點?

我見過別人有這個問題,但還沒有看到解決方案。

任何建議,將不勝感激。

回答

0

如果您想要執行任何加載或卸載,您可以通過覆蓋onVisibilityChanged(布爾可見)來檢測WallpaperService.Engine的可見性何時更改。
當可見性發生變化時,您還應該繼續或暫停您的GlSurfaceView。

您可以在這裏找到更多的信息:
http://developer.android.com/reference/android/service/wallpaper/WallpaperService.Engine.html#onVisibilityChanged(boolean)
http://developer.android.com/reference/android/opengl/GLSurfaceView.html
請參見活動生命週期