2012-07-03 15 views
0

我有以下問題,一些你必須知道在我的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)); 

再次,告訴我,如果你想知道更多。

+0

你這樣做只是一次,並遇到錯誤?還是你多次運行這個代碼? – ThomasW

+1

您是否將位圖綁定(附加)到View層次結構的任何Drawable元素或任何元素?如果是,您可能還需要將該引用設置爲null。請注意,recycle()不釋放內存,它只是標記要發佈的位圖(在位圖存儲在本地位圖堆中的HONEYCOMB設備之前,這很有用)。調用gc()對你的問題肯定沒有幫助。此外,這些位圖大小相關的崩潰通常與位圖本身並不直接相關,而是與代碼中的其他錯誤相關(例如,由於通過靜態變量進行的活動泄漏導致的Drawable泄漏)。 –

+0

@ThomasW當我不使用回收功能時,第一次崩潰。 –

回答

0

我發現了什麼問題。這對任何人都不會有任何干擾,因爲這是一個與我的項目密切相關的愚蠢錯誤,但無論如何我都會這麼說。

其實我有2個錯誤:

  • 一個循環創建元素infinitly。
  • 在廉價手機上執行特定操作後,我將其作爲背景放置了兩張大圖(我仍然在上面,但它應該很容易解決)。完成後我會編輯這個答案。

對於每個幫助過我的人,您都找不到問題的解決方案(與我的位圖屏幕無關),但仍然有幫助。

謝謝。