Android アプリでのビットマップの読み込みが難しい理由には、以下のようなものがあります。
- ビットマップはアプリのメモリ容量をすぐに使い果たします。たとえば、Google Pixel のカメラは最大で 4048x3036 ピクセル(12 メガピクセル)の写真を撮影できます。使用されているビットマップの設定が Android 2.3(API レベル 9)以降のデフォルトである
ARGB_8888
の場合、1 枚の写真をメモリに読み込むのに約 48 MB のメモリ(4048*3036*4 バイト)が必要になります。このようにメモリの需要が大きいと、アプリで使用できるすべてのメモリをすぐに使い果たしてしまいます。 - UI スレッドでビットマップを読み込むと、アプリのパフォーマンスが低下し、その結果、応答性が低下するだけでなく、ANR メッセージが表示されることさえあります。したがって、ビットマップを扱う際にはスレッドを適切に管理することが重要です。
- アプリで複数のビットマップをメモリに読み込む場合、メモリ キャッシュとディスク キャッシュを適切に管理する必要があります。そうしないと、アプリの UI の応答性が低下し、スムーズに表示されなくなる可能性があります。
ほとんどのケースでは、Glide ライブラリを使用してアプリのビットマップを取得、デコード、表示することをおすすめします。Glide を使用すると、Android におけるビットマップなどの画像の操作に関連するこうした複雑なタスクの処理を簡素化できます。Glide の使用方法とダウンロード方法については、GitHub の Glide リポジトリをご覧ください。
また、Android フレームワークに組み込まれている低レベル API を直接操作することもできます。その方法について詳しくは、大量のビットマップを効率的に読み込む、ビットマップのキャッシュ保存、ビットマップ メモリの管理をご覧ください。