new Handler (). postDelayed (новая утечка памяти Runnable () - PullRequest
0 голосов
/ 12 сентября 2018

Относительно проблемы с кучей и утечек памяти,
Я прочитал следующую статью, в которой подчеркивается создание статического класса для части обработчика:
здесь

Теперь следующий код подвержен утечке памяти кучи или нет?

///////////////////Handler 1
new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        if (x == 1) {
            ///////////////////Handler 2            
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    if(y == 1) {
                        ///////////////////Handler 3                        
                        new Handler().postDelayed(new Runnable() {
                            @Override
                            public void run() {
                            //Do work A                             
                            }
                        }, 1000);
                    }
                    else
                    {
                        // do work B
                    }
                }
            }, 1000);
        }
        else
        {
            // do work B
        }
    }
}, 1000);

1 Ответ

0 голосов
/ 17 сентября 2018

Я сделал пробный тест, и в результате LeakCanary для вышеуказанного кода утечка памяти не обнаружена (чтобы убедиться, что LeakCanary работает верно, я использовал другую утечку образца проблемы Handle и обнаружил, чтодля этого обнаружена утечка Handle)

Я пока не могу описать, в чем именно разница

...