В моей деятельности есть вызов метода OnDestroy(). Однако после этого я все еще вижу, что что-то происходит в разрушенной деятельности. Например. когда я добавить этот код на OnCreate:Активность Android живет после OnDestroy
Task.Run(async() => {
while (true) {
System.Diagnostics.Debug.WriteLine("PING");
await Task.Delay(1000);
}
});
, то я могу увидеть PING строку в выходной консоли даже после того, как OnDestroy называлась.
Когда я снова запускаю свою деятельность, я могу дважды увидеть строку PING. После очередного OnDestroy и повторного запуска активности каждая секунда имеет 3 PING-печати.
Что здесь происходит?
Это происходит потому, что вы начинаете новую асинхронную задачу, которая живет независимо от жизненного цикла деятельности. Каждый раз, когда вы проходите через onCreate, вы создаете новую задачу. – z3n105
1) Вы запускаете асинхронную задачу, которая (скорее всего) будет выполняться даже после завершения экземпляра 'Activity'; 2) когда 'onDestroy()' возвращает его [не означает, что его экземпляр будет немедленно завершен] (http://stackoverflow.com/questions/39562914/is-it-possible-for-a-callback-method-to- быть-востребованный после OnDestroy/39563751 # 39563751). – Onik
Вы создаете утечку памяти. Плохо. Не делай этого. В onDestroy есть разработчики для очистки чего-либо, занимающегося активностью, и ваша задача Async явно держит ее. – Budius