不停垃圾收集我在哪裏運行我的二維動畫,當系統GC被稱爲不已的一個問題,我不知道爲什麼。在2D動畫surfaceview
我讀過的所有內容都建議避免在onDraw()方法中創建位圖,但我仍然每秒調用一次GC,這嚴重影響了低端設備的可用性。
的代碼是很長,所以我不會在這裏張貼這一切,但基本上,有一個線程調用 _surfaceHolder.lockCanvas(null)
,然後postInvalidate
,造成的onDraw()被調用,然後_surfaceHolder.unlockCanvasAndPost(_canvas)
。
我的onDraw()方法的_canvas.drawCircle(...)
多次迭代,_canvas.drawBitmap(...)
(繪製SurfaceView創建時所創建一次一個位圖),而且很多涉及Math.pow(...)
數字計算的。該應用程序使用多個(10+)Double ArrayLists,它在每個onDraw()例程中讀寫數次。
任何人都可以闡明爲什麼被稱爲GC經常和我能做什麼來幫助一些輕?我是否只是計算太多,不應該期望更高的幀速率?
編輯:值得一提的是,當我註釋掉所有位圖和FPS隨着時間的推移不斷降低,時間越長,動畫已經運行了這個問題,即使仍然存在。
你做過堆分析嗎?這裏有一篇不錯的博文:[Android應用程序的內存分析](http://android-developers.blogspot.co.nz/2011/03/memory-analysis-for-android.html) – tom
感謝您的鏈接!運行堆分析後,我看到byte []數組佔用大量內存。即使我沒有將其繪製到畫布上,我仍然有一個我忘記的500x500px圖像。當我評論這條線時,我得到了更小的GC呼叫(但頻繁)。 – SJonesGSO