5

垂直 LinearLayout に一連のビューがあります。各ビューは、スクロールするとビットマップを生成して描画します。パフォーマンス上の理由から、onDraw() が呼び出されるたびにビットマップを生成したくありませんが、メモリ上の理由から、ビットマップへのハード参照を保持できません。取るべき戦略についてアドバイスを得ることができました。

私はすでに、ビットマップを生成し、それを SoftReference でラップするという明白なルートを試しました。これは 2 つの理由で失敗しました。1. 参考文献は、私が予想するよりもはるかに熱心に収集されます。2. まだ OOM が表示されます。Bitmap は特に大きくないため、これは衝撃的です。そのため、単一のビューで OOM が発生することはありません。問題のある SoftReference が解放される機会が与えられていないために OOM が発生すると思います。また、アプリケーションに 6 MB のヒープ サイズが割り当てられている場合 (DDMS ビューによると)、OOM が発生します。OOM をスローする前に、ヒープ サイズが 16 MB に拡大すると予想されます。

何かアドバイス?

4

1 に答える 1

11

問題は、ビットマップがファイナライザーを使用するため、ネイティブ メモリが実際に解放されるまでに GC パスが数回かかる場合があることです。これは、私たちが改善に取り組んでいるものです。

于 2010-12-03T17:34:18.340 に答える