これらのコードがAndroid 2.1でメモリリークを引き起こす可能性があることがわかりました
SoundPool soundPool = new SoundPool(10, 7, 0);
...
...
soundPool = null;
実行のたびに、MAT プラグインは、「android:unnamed_thread」の 2 つの String オブジェクトがプロセスのヒープに追加されることを通知します。それは問題ですか?
これらのコードがAndroid 2.1でメモリリークを引き起こす可能性があることがわかりました
SoundPool soundPool = new SoundPool(10, 7, 0);
...
...
soundPool = null;
実行のたびに、MAT プラグインは、「android:unnamed_thread」の 2 つの String オブジェクトがプロセスのヒープに追加されることを通知します。それは問題ですか?
soundPool = null の代わりに soundPool.release() を実行しようとしましたか?
2 つの可能性が考えられます (さらに多くの可能性があります)。
最初の (ほとんどの場合) は、すべての Java オブジェクトに当てはまります。参照を設定したからといっnull
て、その背後にあるオブジェクトがガベージ コレクションされるとは限りません。
オブジェクト自体に 2 つのスレッド オブジェクトへの参照が含まれている場合、SoundPool
スペースが必要になるまで 3 つのいずれも GC されるとは限りません (もちろん、コレクターの積極性にもよりますが)。
2 つ目 (可能性は低い) は、Android がスレッド (またはSoundPool
) オブジェクトを再度使用する必要がある場合に備えてキャッシュするのに十分なほどスマートである可能性があることです。オブジェクトの作成がオブジェクトの再利用よりもコストがかかる場合、彼らはパフォーマンスの最適化としてこれを行っていないかもしれません。
その場合、キャッシュ内のどこかにオブジェクトへの参照がまだあり、ガベージ コレクションの対象とは見なされません。