我想我的Android动态壁纸中有内存泄漏.每当我旋转屏幕时,收集的内存垃圾量增加50kb并且不会再次下降.我认为它可能是由预定的未来引起的,所以我将提出一个场景,看看是否是这种情况.
假设您有一个具有以下成员的类(我们称之为Foo).
private ScheduledFuture<?> future;
private final ScheduledExecutorService scheduler = Executors
.newSingleThreadScheduledExecutor();
private final Runnable runnable = new Runnable() {
public void run() {
// Do stuff
}
};
Run Code Online (Sandbox Code Playgroud)
现在你设定了预定的未来
future = scheduler.scheduleAtFixedRate(runnable, delay, speed,
TimeUnit.MILLISECONDS);
Run Code Online (Sandbox Code Playgroud)
将来会对runnable进行引用,而runnable可以保存对父Foo对象的引用.我不确定是不是这种情况,但这个事实是否意味着如果程序中没有任何内容引用Foo,垃圾收集器仍然无法收集它,因为有预定的未来?我不太擅长多线程,所以我不知道我显示的代码是否意味着计划任务的寿命比对象长,这意味着它不会被垃圾收集.
如果这种情况不会导致阻止Foo被垃圾收集,我只需要通过一个简单的解释告诉它.如果它确实阻止Foo被垃圾收集,那么我该如何解决?要做future.cancel(true); future = null;什么?这future = null部分是不必要的吗?