下面是一個示例代碼,這使我有點缺失:活動的實例何時會死?
package com.leak;
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
public class WindowLeakActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new LeakThread().execute();
}
class LeakThread extends AsyncTask<Void, Void,Void>{
ProgressDialog dialog;
@Override
protected void onPreExecute() {
dialog=new ProgressDialog(WindowLeakActivity.this);
dialog.show();
}
@Override
protected Void doInBackground(Void... params) {
try {
Thread.sleep(2000);
finish();
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
//that would be ok
if(WindowLeakActivity.this!=null && !WindowLeakActivity.this.isFinishing())
dialog.dismiss();
}
}}
正如你看到的,我創建了一個LeakThread,並完成在doInBackground()方法WindowLeakActivity。
爲了防止泄漏的窗口錯誤,我有),以檢查活動已在onPostExecute(已完成method.That讓我有點missing.I有以下幾個問題:
- 是做Activity實例isFinish()檢查onPostExecute是否安全?如果我的Thread類不是Activity的內部類,我必須首先檢查Activity實例是否爲空?
- 什麼時候Activity實例會死?作爲Activity的生命週期描述,它會在回調函數onDestroy()時終止,但是Activity的Thread仍然在繼續。儘管它的窗口不可見,但我也可以得到它的實例。
- 如果我調用System.gc()。它會收集Activity的實例嗎?
對不起,我的壞描述非常感謝您閱讀我的問題。
我知道這不是答案,但請檢查此:http://commonsware.com/blog/2010/09/10/asynctask-screen-rotation.html你可以在這裏找到非常好的例子如何AsyncTask可以處理所有這些活動問題。 – ania
謝謝。這是一個很好和安全的AsyncTask模板。 – user890973