我有以下問題,一些你必須知道在我的Android應用:Android的位圖太重錯誤
3288字節外部分配太大,這一進程。
出的內存:堆大小= 5959KB,分配= 3922KB,位圖大小= 18614KB
VM不會讓我們分配3288個字節
事實:
我創建一個位圖的屏幕(非常巨大),我操縱它(改變尺寸等)做一個翻頁動畫。
它只在一個渴望宏達崩潰:在銀河S2和kindle火,沒有問題。
我已經desallocating當前位圖,每次我創建一個新的用下面的代碼:
位圖舊= this.bitmap;
this.bitmap = bitmap; this.invalidate(); if(old != null) old.recycle();
我也tryied調用這個函數:
公共無效循環(){ 如果 this.bitmap.recycle();(this.bitmap!= NULL) System.gc(); Runtime.getRuntime()。gc(); }
Severals在我的代碼的時候,有時它會稍微好一點(如崩潰稍晚一點),但是這仍然不是很好。
- 我在這個問題上花了很多時間,我真的不知道如何解決它。這就像在論壇上有很多錯誤信息,所以我有點迷路。
謝謝,要求更高的精度。
編輯:
下面是一個代碼調用了很多:
//set the foreground image with the current day
Bitmap b = Bitmap.createBitmap(visibleLayout.getWidth(), visibleLayout.getHeight(),Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
visibleLayout.draw(c);
viewBitmapNext.setBitmap(b);
viewBitmapNext.setVisibility(View.VISIBLE);
哪裏viewBitmapNext View類的overwritted元素。 setBitmap函數如上所述。
關於resizement,我做這行的代碼:
viewBitmapPrevious.setLayoutParams(new RelativeLayout.LayoutParams((int) (iterator - ((totalWidth - iterator) - activity.getResources().getDimension(R.dimen.margin_right))/2), RelativeLayout.LayoutParams.WRAP_CONTENT));
再次,告訴我,如果你想知道更多。
你這樣做只是一次,並遇到錯誤?還是你多次運行這個代碼? – ThomasW
您是否將位圖綁定(附加)到View層次結構的任何Drawable元素或任何元素?如果是,您可能還需要將該引用設置爲null。請注意,recycle()不釋放內存,它只是標記要發佈的位圖(在位圖存儲在本地位圖堆中的HONEYCOMB設備之前,這很有用)。調用gc()對你的問題肯定沒有幫助。此外,這些位圖大小相關的崩潰通常與位圖本身並不直接相關,而是與代碼中的其他錯誤相關(例如,由於通過靜態變量進行的活動泄漏導致的Drawable泄漏)。 –
@ThomasW當我不使用回收功能時,第一次崩潰。 –