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