我在Android 2.1上发现这些代码可能是内存泄漏
SoundPool soundPool = new SoundPool(10, 7, 0);
...
...
soundPool = null;
每次执行后,MAT pluging都会告诉两个String对象“android:unnamed_thread”被添加到进程的堆中。这是一个问题吗?
答案 0 :(得分:2)
您是否尝试运行soundPool.release()而不是soundPool = null?
答案 1 :(得分:0)
我看到两种可能性(可能好更多)。
第一个(最有可能)对所有Java对象都是如此:仅仅因为您将引用设置为null
并不会自动意味着它后面的对象将被垃圾收集。
如果SoundPool
对象本身包含对两个线程对象的引用,则在需要空格之前,三者中的任何一个都不一定是GC(当然,这取决于收集器的攻击程度)
第二种(不太可能)是Android可能足够聪明以缓存线程(甚至SoundPool
)对象,以防它们需要再次使用。如果对象创建比对象重新循环更昂贵,他们可能会将此作为性能优化。
在这种情况下,他们仍然会在缓存中的某个位置引用对象,并且它们不会被视为有资格进行垃圾回收。