0

フラグメント(より正確には、 ViewPager )で大きな画像を効率的にリサイクルするにはどうすればよいですか?

onDestroyView()では、bitmap.recycle()を実行してビットマップをリサイクルしますが、最初に、へのパスをonSaveInstanceStateのバンドルに保存します。onSaveInstanceStateが呼び出されない場合のケースに関する何千もの質問とスレッドを読みました。ただし、FragementStatePagerAdapterdestroyView()を呼び出すため、フラグメントに関連付けられているリソースの割り当てを解除します。

FragmentStatePagerAdapterがsuper.destroyView()を呼び出さないようにすると、FragmentのUIはそのままになり、認識します。

私が達成したいのは、フラグメントが破棄されたときに.recycle()を実行し、onSaveInstanceStateにビットマップへのパスを保存し、onCreateView()が呼び出されたときにパスを再利用して新しいビットマップを作成し、同じビットマップをフラグメントUIのImageView 。

ImageViewに設定する前に、ビットマップを効率的にロード/サンプリングするためにGoogleのガイドを使用しています。

どんなポインタも素晴らしいでしょう!

4

1 に答える 1

0

別の方法を考えてください。LruCache を使用し、ページャーで使用するすべてのフラグメント/ビューにアクセスできるビットマップ マネージャーを作成します。このようにして、メモリ内に常に最新のビットマップを保持し、それらの量を制限して OutOfMemory 例外を発生させないようにします。

于 2012-11-15T01:09:06.833 に答える