Я инициализирую переменную-член в классе Activity
private String test = new String("A");
то я использую его для записи в журнал долгое время цикла в doInBackground()
метод анонимного AsyncTask, запущенного из Activity
new AsyncTask<Void, Void, Void>() {
@Override
protected void onPreExecute() {
}
@Override
protected void onPostExecute(Void result) {
}
@Override
protected Void doInBackground(Void... params) {
for (int j = 10; j >= 0; j--) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.i("DOINBACKGROUND ", test);
}
}.execute();
Вопрос:
Когда я покидаю Activity, пока Asynctask
все еще выполняется, а после действия onDestroy()
выполняется, я вижу в журнале, что переменная-член все еще жива и не уничтожена. Может кто-нибудь объяснить мне, как это возможно?
ВОСЬМОЙ ВОПРОС:
переменная-член все еще жива, потому что даже после onDestroy()
она еще не сбрасывается из-за критериев gc и приоритета gc. Это нормально.
Но я сомневаюсь, что если
- переменная-член "test" (и контекст активности) не будет мусорной, пока ссылочная асинтекса не закончит свой материал, поэтому асинтеза может завершить ее
doInBackground()
всегда и, конечно, без сбоев (хотя и с временным потреблением памяти)
или вместо этого
- переменная-член "test" будет изнашиваться рано или поздно, независимо от того, запущена ли асинтеза, возможно, приведет к сбою asysnctask