1

私は、「ビットマップサイズがVM予算を超えています」エラーをトレースするのに大きな問題があります。私は他の質問を見て、アクティビティが破壊されたりビューがウィンドウhttps://stackoverflow.com/a/6779448/571143から切り離されたときにbitmap.recycle()を使用して変数、ビットマップ、キャンバスをヌルに設定すると、コンテキストを使用し、this.getAplicationContext()を使用します)。割り振りトラッカーまたはヒープ・アナライザーは、「ビットマップ・サイズがVM予算を超えています」というエラーをトレースするのに役立ちますか?

私が経験している問題は、読み込みには大きすぎるビットマップではありません。最初はすべてが正常にロードされますが、現在のアクティビティを何度も繰り返して変更した後は、このエラーが発生します(デバイス上ではエミュレータよりもはるかに多くのアクティビティが変更されます)。

私の質問に戻って、割当トラッカーまたはヒープアナライザーを使用して正しい方向に私を導く方法はありますか?これらのツールには「ビットマップ割り当て」の痕跡はなく、小規模(主に1kb未満)の割り当てしかありません。私はすでにこれを読んでいます:http://android-developers.blogspot.com/2009/02/track-memory-allocations.html

私はビットマップが割り当てを解除しないので、私は間違ったことをしていることを知っていますが、私が取り組んでいるプロジェクトはかなり大きいです。手ですべてを分析することは最後の手段となり、非常に時間がかかります。

このようなシナリオでは、これらのツールに関するヒントをお待ちしております。

歓声、あなたはメモリリークのそのいくつかの並べ替えを考え出してきたように

答えて

1

kajman。まだビットマップをクリアしないでキャッシュに蓄積していないことを確認してください。アクティビティやコンテキストへの参照を持つ長い実行中のタスク、または長時間実行されているタスクやシングルトンを持つリスナーを登録するアクティビティなど、他の可能性がある(さらに微妙な)問題があります。

ツール「Eclipse Memory Analyzer http://www.eclipse.org/mat/」を使用して、保持されている参照の種類を追跡できます。ビットマップはネイティブメモリに割り当てられ、VMヒープダンプには表示されないので、2.xの電話ではややこしい。ビットマップは引き続き表示されますが、実際に使用するサイズでは表示されません。多くの新しいアクティビティを開始した後、最初にアプリを開いたときにビットマップオブジェクトの数を比較しようとすると、この問題を回避できます。これらの問題をデバッグするとのrelaventのツールを使用しての優れた話については

、グーグルIOの話を参照してください。http://www.youtube.com/watch?feature=player_embedded&v=_CruQY55HOk

+0

私はHPROFダンプをanalizeしようとしたとき、私はアナライザで、次の例外が発生しました(私は最新のをダウンロードしましたバージョン): "ヒープ・ダンプ 'dump.hprof'のオープンエラー。詳細はエラー・ログをチェックしてください。 ヒープ・ダンプ 'dump.hprof'のオープン時にエラーが発生しました。 3)(java.io.IOException) 不明なHPROFバージョン(JAVA PROFILE 1.0.3) " – kajman

+0

これを見つけました:http://stackoverflow.com/questions/6219049/error-openning-hprof-file solution – kajman

+0

yeah its h prof-conv filename.hprof targetname.hprofここで、hprof-convはsdkのツールです。 –

関連する問題