2011-07-29 6 views
1

このエラーは、stackoverflowで何度も発生したことがわかりましたが、通常はビットマップサイズの問題でした。私のものは違います。私はカスタムアダプタでListViewを持っています。ここに私のgetViewメソッドがあります:OutOfMemoryError:ビットマップサイズがVMの予算を超えています(画像サイズの問題ではありません)

public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.cell, null); 
    } 
    if (position % 2 == 0) { 
     convertView.setBackgroundResource(R.drawable.cell_even_bg); 
    } else { 
     convertView.setBackgroundResource(R.drawable.cell_odd_bg); 
    } 
} 

今、私はexを持っています。私のlistViewの100個のセルと私はしばらくの間、このリストをスクロールし、最終的に私はいつもエラーが出るOutOfMemoryError:ビットマップサイズはVMの予算を超えています - そしてDDMSではconvertView.setBackgroundResource(...)が呼び出されていることがわかります。私のドロアブルは1x10xで、Y軸で繰り返されます。

+0

それは痛みです...私は時々この問題を抱えています。 –

答えて

0

問題を確認するために100個のセルを持つテストアプリケーションを作成し、OOMエラーなしで正常に動作することがわかりました(何度もスクロール)。 コードに他のメモリリークがある必要があります。

+0

私はそれを非常に疑っています。 DDMSは、これらの2つの行のいずれかで、超過が起こったと私が言ったように。 –

+0

http://developer.android.com/resources/articles/avoiding-memory-leaks.htmlを表示していますか? OOMが発生したとき、DDMSは、主に根本原因線ではない線がMEM漏れを引き起こしたと言います。他のコードを公開できますか? – outman

+0

残念ながら私はできませんが、私が言うことは、convertView.setBackgroundResource(R.drawable.cell_odd_bg)を変更したときです。 convertView.setBackgroundColor(Color.GREY);と言うと、 (もちろん偶数セルでも同じ)問題は発生しません。 –

関連する問題