各エンティティにスプライトを表すビットマップがある Android アプリを構築しています。ただし、各エンティティは複製できます (たとえば、エンティティ asdf の 3 つのコピーがある場合があります)。
1 つの方法は、事前にすべてのスプライトをロードしてから、エンティティのコンストラクターに正しいスプライトを配置することです。
ただし、エンティティのコンストラクターがビットマップをデコードするように、ビットマップを遅延してデコードしたいと考えています。これに関する唯一の問題は、複製されたエンティティが同じビットマップを 2 回ロードし、2 倍のメモリを使用することです (エンティティが n 回作成された場合は n 回)。
これを修正するために、デコードされたビットマップをハッシュに格納する SingularBitmapFactory を構築しました。同じビットマップが再度要求された場合、新しいビットマップを構築する代わりに、以前にハッシュされたものを返すだけです。ただし、これの問題は、ファクトリがすべてのビットマップのコピーを保持しているため、ガベージ コレクションが行われないことです。
ハッシュマップを弱参照値を持つものに切り替える最良の方法は何ですか? 言い換えれば、他のオブジェクトがそれへの参照を保持している場合、値が GC されない構造が必要ですが、他のオブジェクトがそれを参照しない限り、GC されることができます。