Anroid anonymous asyncTask - это вызовет утечку памяти

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

 void startAsyncTask() {
    new AsyncTask<Void, Void, Void>() {
        @Override protected Void doInBackground(Void... params) {
            while(true);//loop  to keep thread alive forever.
        }
    }.execute();
}

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

Ответ 1

Он будет ссылаться на внешний класс (Activity) до завершения задачи. Поэтому это приведет к тому, что деятельность будет проводиться дольше, чем это абсолютно необходимо. Однако, если задача заканчивается в разумные сроки, это должно быть хорошо - после ее завершения задача будет завершена и станет сборкой мусора, что сделает сборку Activity Activity сборной. Большая проблема связана с долгосрочными потоками, которые могут продлиться задолго до конца деятельности или вообще не заканчиваться, если плохо написаны.