多くのビットマップオブジェクトを生成するアプリケーションがあります。一度ビットマップを作成すると、残りのビットマップはすべて同じサイズになります。ビットマップをロードする最速の方法、一度作成したビットマップを再利用する
現在、携帯電話で約50〜80ミリ秒で新しいビットマップをロード/作成することができます。しかし、これらの作成の速いペースのために、私は一定のGCを打つことになります。
私は同じビットマップオブジェクトを再利用したいと思いますが、sdkを通じてこれを行う方法がわかりません。
私はlibjpegをコンパイルし、NDKを介して画像をロードしてビットマップを再利用しましたが、ロード速度は約200ミリ秒に低下しましたが、これは遅すぎます。 私の目の前にコードを投稿します。
質問:
GCを避けるために、私のビットマップオブジェクトを再利用する方法はありますか? NDKを使用して画像をより高速に読み込む方法はありますか? OSがビットマップをロードする方法にフックすることは可能ですか?私はlibjpegTurboについて知っていますが、私は現在コンパイルすることができません(別のトピックは別の日です)。
これを行う最善の方法については、他の考えがあります。
私は約20ビットマップを作成していますので、それらをすべてメモリに保存することはできません。私は実際に新しいビットマップを引っ張っているキューをポピュレートする背景スレッドを持っています。大きな問題は新しいビットマップオブジェクトを作成するのではなく、私のバックグラウンドスレッドで、ビットマップのプールから抜き出して再利用したいので、GCをあまり必要としません。 – broschb
@broschbあなたがそれらをメモリに保持できない場合、どのようにそれらを再利用できますか?あなたはそれが意味をなさないことを実感していますか?メモリの制限がある場合は、ハッシュマップとキューを使用してイメージキャッシュを実装し、その後、ロードされたビットマップの数に一定の限界があると、古いビットマップをキューから削除し、GCにヒントを与えます彼らは記憶からクリアする必要があります。ハッシュマップは、ビットマップが現在キューにあるかどうか、およびその位置を識別するために使用されます。 – onit
ビットマップのピクセルデータを、別のビットマップからの新しいピクセルデータで変更することによって、ビットマップを再利用することができます。 @Samuelsの反応を見て、これは私が考えているトラックに沿っていると思います。 – broschb