我在Activity類初始化一個成員變量活動的成員範圍和的AsyncTask
private String test = new String("A");
然後我用它來寫的很長一段時間在一個匿名的AsyncTask的doInBackground()
方法耗時循環記錄從活動
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();
問題: 後,當我離開的活動,同時Asynctask
仍在執行,並活動的onDestroy()
執行,我在Log中看到成員變量仍然存在並且沒有被銷燬。有人可以向我解釋怎麼可能?
BOUNTY問題: 成員變量還活着,因爲即使onDestroy()
後,它不是尚未garbaged由於GC標準和GC優先。還行吧。
但我的疑問是,如果
- 「測試」成員變量(和活動的範圍內)將不會garbaged直到引用的AsyncTask結束了它的東西,這樣的AsyncTask可以隨時且確實地完成其
doInBackground()
沒有崩潰(儘管具有臨時存儲器消耗)
或代替
- '測試' 成員變量將b Ëgarbaged遲早不管的AsyncTask運行,可能導致一個asysnctask的崩潰
因此,我的片段示例中的asynctask將始終完成它的doInBackground(),並且肯定不會由於NPE而崩潰? – GPack