人々が何と言おうと、実際にはライブ壁紙にたくさんの画像を含めることができます。唯一のトリッキーなことは、メモリ制限です。アプリケーションに 40 個もの .png をロードし、1 分に 1 回リロードしました。
しかし、アプリケーションで非常に多くの画像を処理する場合は、スマートな方法でそれらをロードする必要があります。
public BitmapResult decodeResource(int file, int scale){
//Decode image size
BitmapFactory.Options o = new BitmapFactory.Options();
o.inPurgeable = true;
o.inInputShareable = true;
o.inJustDecodeBounds = true;
BitmapFactory.decodeResource(resources, file, o);
BitmapFactory.Options o2 = new BitmapFactory.Options();
o2.inPreferredConfig = Bitmap.Config.ARGB_8888;
o2.inSampleSize=scale;
return new BitmapResult(BitmapFactory.decodeResource(resources, file, o2),o2.outWidth,o2.outHeight);
}
スケール変数がわかりますか?これは 2 のべき乗である必要があり、ビットマップを縮小します。
問題が発生した場合は、ビットマップを消去し、ビットマップを低品質で再ロードします。
void init()
{
try
{
loadFirstBitmap();
loadSecondBitmap();
}
catch(java.lang.OutOfMemoryError error)
{
/*some infinite loop breaker*/
scale *= 2;
cleanup();
init();
}
}
また、システムはビットマップを削除しません。自分でビットマップを消去してから、おそらくガベージ コレクターを呼び出す必要があります。
bitmap1.recycle();
bitmap2.recycle();
System.gc();
ビットマップを必要なサイズにサイズ変更することも良い考えです。そうしないと、描画しようとするたびにシステムが createScaledBitmap を呼び出し、追加のメモリが必要になるからです。
そのような種類のアプリのメモリ上限が何であるか、ほとんどの場合 24 MB に等しいメモリ ヒープ制限が何であるかはわかりませんでしたが、私のアプリは最大 13 MB のメモリを消費し、誰もクラッシュを報告したことはありません。 Android デバイス >= 2.2。
したがって、いくつかの最適化ルールに従えば、アプリケーションに必要な数のビットマップをロードできます。