android.media.SoundPool会导致内存泄漏吗?

时间:2010-08-16 02:19:42

标签: android memory-leaks soundpool

我在Android 2.1上发现这些代码可能是内存泄漏


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

每次执行后,MAT pluging都会告诉两个String对象“android:unnamed_thread”被添加到进程的堆中。这是一个问题吗?

2 个答案:

答案 0 :(得分:2)

您是否尝试运行soundPool.release()而不是soundPool = null?

答案 1 :(得分:0)

我看到两种可能性(可能更多)。

第一个(最有可能)对所有Java对象都是如此:仅仅因为您将引用设置为null并不会自动意味着它后面的对象将被垃圾收集。

如果SoundPool对象本身包含对两个线程对象的引用,则在需要空格之前,三者中的任何一个都不一定是GC(当然,这取决于收集器的攻击程度)

第二种(不太可能)是Android可能足够聪明以缓存线程(甚至SoundPool)对象,以防它们需要再次使用。如果对象创建比对象重新循环更昂贵,他们可能会将此作为性能优化。

在这种情况下,他们仍然会在缓存中的某个位置引用对象,并且它们不会被视为有资格进行垃圾回收。