2011-12-21 7 views
2

Android 4.0ランチャーを変更しています。私は多くのOutOfMemoryErrorsを実行しています。 4.0.3のアップデート以来、それはずっと悪くなった(または始まった、それはうまくいたようですが、私は決して適切にテストする必要はありません)、私はそれを修正するために多くのことを試みました。エラーは私の変更なしに在庫ランチャーにもあります。Androidリソースクラスメモリ使用量

私はEclipse Memory Analyzerのヒープhprofを見て、システムのResourcesクラスがメモリの50%を占めていることに気付きました。そのほとんどはビットマップで、1MB 512x512pxのビットマップを含んでいました。私の電話は400x800なので、なぜその解像度でリソースがあるのか​​わかりません。そこに800以上の他のビットマップもありましたが、これはより合理的なサイズでした。

アプリには800のリソースが含まれていないので、他のパッケージのものである可能性はありますか?私は、アプリケーションが他のアプリからロードアイコンやウィジェットのプレビューをしていることは知っていますが、それはまだ最大800ではなく、それがそれらの一部であっても、なぜそれはまだメモリに保持されていますか?

必要に応じて、hprofファイルをhttp://176.31.247.124/nebkat/heap.hprofにアップロードしました。

答えて

0

これはCyanogenModの問題であることが判明しました。今修正されました。

0

AndroidのBitmapクラスには、VMのヒープサイズからビットマップを保持する「機能」があります。これは、ビットマップのスペースがさらに少なくなることを意味します。

ビットマップに関連するOutOfMemory例外を解決する唯一の方法は、このビットマップの使用を終了した後にBitmap.Recycle();を使用してリソースを解放する必要があります。 Runtime.gc()を使用してガベージコレクタをフラッシュします。

私の個人的な意見はこれがうんざりであり、ビットマップもあなたのアプリのVMヒープサイズに含めるべきだということですが、これはAndroidの場合には当てはまりません。

関連する問題