Может ли запланированное будущее вызвать утечку памяти?

Я думаю, что у меня есть утечка памяти в моих живых обоях Android. Всякий раз, когда я поворачиваю экран, объем собранного мусора в памяти увеличивается на 50 КБ и не уменьшается. Я думаю, что это может быть вызвано запланированным будущим, поэтому я собираюсь представить сценарий, чтобы увидеть, так ли это.

Допустим, у вас есть класс (назовем его Foo), который имеет следующие члены.

private ScheduledFuture<?> future;
private final ScheduledExecutorService scheduler = Executors
        .newSingleThreadScheduledExecutor();

private final Runnable runnable = new Runnable() {
    public void run() {
        // Do stuff
    }
};

И теперь вы установили запланированное будущее

future = scheduler.scheduleAtFixedRate(runnable, delay, speed,
                TimeUnit.MILLISECONDS);

Будущее содержит ссылку на runnable, а runnable содержит ссылку на родительский объект Foo. Я не уверен, что это так, но может ли это означать, что если в программе ничего не содержится ссылка на Foo, сборщик мусора все равно не сможет ее собрать, потому что есть запланированное будущее? Я не слишком хорош в многопоточности, поэтому я не знаю, означает ли то, что код, который я показал, означает, что запланированное задание будет жить дольше, чем объект, то есть не будет собирать мусор.

Если этот сценарий не приведет к тому, что Foo не будет собирать мусор, мне просто нужно сказать это с простым объяснением. Если это не позволяет Foo собирать мусор, то как мне это исправить? Должен сделатьfuture.cancel(true); future = null;? Этоfuture = null часть ненужная?

Ответы на вопрос(3)

Ваш ответ на вопрос