我在我的應用程序有問題。在landpace模式下切換時,會調用setContentView()方法來顯示鋼琴鍵盤。鋼琴鍵盤類擴展Surfaceview以獲得更好的性能,顯示按下的鍵。在一個位圖陣列與BitmapFactory.decodeResource()方法,並保持位圖,直到應用程序被破壞內存異常與位圖
RelativeLayout rootLayout = (RelativeLayout) findViewById(R.id.rootLayout);
RelativeLayout.LayoutParams relativeLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
relativeLayoutParams.addRule(RelativeLayout.BELOW, R.id.relativeLayoutLowerBar);
rootLayout.addView(keyboardSurfaceView, relativeLayoutParams);
在我keyboardSurfaceView類IM裝載位圖:這個SurfaceView類作爲子項添加到我的景觀佈局。這很好。當以縱向模式IM swiching,更改與佈局的setContentView()和刪除keyboardSurfaceView:
if(keyboardSurfaceView != null && keyboardSurfaceView.getParent() != null)
((ViewGroup) keyboardSurfaceView.getParent()).removeView(keyboardSurfaceView);
位圖被加載一次。第一次切換到橫向模式時。我遇到了一個內存不足的錯誤,當它從風景中的燈光照亮10-20倍時,當我更新ddms視圖中的堆時,我可以看到,每當我從橫向視圖中的protrait視圖切換時,堆大小都會增長到約。 20mb然後應用程序崩潰。我不知道爲什麼這一直在發生。位圖只加載一次,而不是每次都加載。 我也試過bitmap.recycle(); bitmap = null
沒有成功。也嘗試按照Google最佳做法中所述,使用LRUCache類緩存位圖。我也搜索了一個適合我的問題的解決方案。仍然無法解決這個問題。我自己處理縱向/橫向更改(將onConfigurationChanged()方法重寫)。將drawable-xhdpi中的所有圖片都放在一塊。當改變方向時,堆的大小與以前一樣增長,但仍在增長。任何幫助,將不勝感激......
例外:
02-13 22:44:09.419: E/dalvikvm-heap(935): 11448-byte external allocation too large for this process.
02-13 22:44:09.419: E/dalvikvm(935): Out of memory: Heap Size=16391KB, Allocated=13895KB, Bitmap Size=16394KB, Limit=32768KB
02-13 22:44:09.419: E/dalvikvm(935): Trim info: Footprint=16391KB, Allowed Footprint=16391KB, Trimmed=432KB
02-13 22:44:09.419: E/GraphicsJNI(935): VM won't let us allocate 11448 bytes
我已經閱讀過,但沒有成功。即使位圖已經在內存中,問題是堆積越來越大 – sNore 2013-02-13 22:13:15
如果是這樣,你可以發佈更多的代碼,因爲你的代碼可能包含其他地方的錯誤。 – Pongpat 2013-02-14 04:53:17