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