0

これらのコードがAndroid 2.1でメモリリークを引き起こす可能性があることがわかりました


    SoundPool soundPool = new SoundPool(10, 7, 0);
    ...
    ...
    soundPool = null;

実行のたびに、MAT プラグインは、「android:unnamed_thread」の 2 つの String オブジェクトがプロセスのヒープに追加されることを通知します。それは問題ですか?

4

2 に答える 2

2

soundPool = null の代わりに soundPool.release() を実行しようとしましたか?

于 2010-11-04T01:56:19.897 に答える
0

2 つの可能性が考えられます (さらに多くの可能性があります)。

最初の (ほとんどの場合) は、すべての Java オブジェクトに当てはまります。参照を設定したからといっnullて、その背後にあるオブジェクトがガベージ コレクションされるとは限りません。

オブジェクト自体に 2 つのスレッド オブジェクトへの参照が含まれている場合、SoundPoolスペースが必要になるまで 3 つのいずれも GC されるとは限りません (もちろん、コレクターの積極性にもよりますが)。

2 つ目 (可能性は低い) は、Android がスレッド (またはSoundPool) オブジェクトを再度使用する必要がある場合に備えてキャッシュするのに十分なほどスマートである可能性があることです。オブジェクトの作成がオブジェクトの再利用よりもコストがかかる場合、彼らはパフォーマンスの最適化としてこれを行っていないかもしれません。

その場合、キャッシュ内のどこかにオブジェクトへの参照がまだあり、ガベージ コレクションの対象とは見なされません。

于 2010-08-16T02:29:55.860 に答える