アクティビティの中でアニメーションドローイングを作成するために多くのビットマップを処理していますが、(多くのメモリを使用していても)完全に動作します。しかし、ユーザーがMainActivityに戻って戻ると、メモリは解放されません。その瞬間ビットマップを2回目に処理する際のOutOfMemoryError
:
- ユーザーは、その後、別の AnimationDrawableを作成するために第2の活動をrelaunches場合は、私のアプリケーションに割り当てられたメモリ が同じ 一度に2つのAnimationDrawablesを含めることはできませんので、OOMErrorが発生します。
- ユーザーがfinish()を呼び出すと、アプリケーションはキャッシュされたままで、メモリも解放されません。
どうすればそのメモリを解放できますか?私はすべての変数をnullに設定しようとしましたが、2番目のアクティビティの最後に、さまざまな瞬間にsystem.gc()を呼び出そうとしました。
コードのこの部分は十分なものでなければならない:コードのこの部分は、ためのループである
try {
d = (BitmapDrawable) BitmapDrawable.createFromStream(new BufferedInputStream(new FileInputStream(src)), null);
b = ((BitmapDrawable) d).getBitmap();
b = Bitmap.createScaledBitmap(b, 300, 450, true);
d = new BitmapDrawable(b);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
animation.addFrame(d,1000/fps); // animation is an AnimationDrawable
、それは通常70と100倍の間で約繰り返されます、アニメーションは、このように非常にあります"ヘビー"。どのように私はそれを取り除くのですか? 2番目のアクティビティが一時停止すると、アプリは「忘れる」ことを願っています。
ありがとうございました。あなたはもうBitmapオブジェクトを必要としません:)
この回答http://stackoverflow.com/questions/7606846/how-を見ますover-error-error-error-out-memory-error-bitmap-size-exceed-vm-bu/7606914#7606914 –