Android 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) до завершения задачи. Таким образом, это приведет к тому, что мероприятие будет проводиться дольше, чем это необходимо. Однако, если задача завершается в течение разумного периода времени, это должно быть нормально - после ее завершения задача будет завершена и станет сборщиком мусора, что сделает сборщик мусора Деятельностью. Большее беспокойство вызывают долговременные потоки, которые могут длиться намного дольше после окончания действия или вообще не заканчиваться, если плохо написаны.

Другие вопросы по тегам