在我的主要活動我有一個AsyncTask
運行這postExecute()
更新了ListView.
現在之前,如果我的行爲被摧毀postExecute()
被調用因任何原因會是什麼AyncTask
的狀態。 onPostExecute()
UI更新會引發異常。狀態下,當活動被銷燬
我認爲的一種方法是取消onDestory()
中的ayncTask。但是如果asynctask在postExecute中被銷燬時被調用如何處理它。
在我的主要活動我有一個AsyncTask
運行這postExecute()
更新了ListView.
現在之前,如果我的行爲被摧毀postExecute()
被調用因任何原因會是什麼AyncTask
的狀態。 onPostExecute()
UI更新會引發異常。狀態下,當活動被銷燬
我認爲的一種方法是取消onDestory()
中的ayncTask。但是如果asynctask在postExecute中被銷燬時被調用如何處理它。
一些美國可以如何處理üR代碼裏面除了這樣,U可以在的AsyncTask
處理異常public abstract class ExceptionAsyncTask<Params, Progress, Result> extends AsyncTask<Params, Progress, Result> {
private Exception exception=null;
private Params[] params;
@Override
final protected Result doInBackground(Params... params) {
try {
this.params = params;
return doInBackground();
}
catch (Exception e) {
exception = e;
return null;
}
}
abstract protected Result doInBackground() throws Exception;
@Override
final protected void onPostExecute(Result result) {
super.onPostExecute(result);
onPostExecute(exception, result);
}
abstract protected void onPostExecute(Exception exception, Result result);
public Params[] getParams() {
return params;
}
}
可以請你解釋一下 – mSO
我們重寫doInBackground在我們的子類中做後臺工作,在需要的地方愉快地拋出異常。然後你被迫執行onPostExecute(因爲它是抽象的),這輕輕地提醒你處理所有類型的Exception,它們作爲參數傳遞。在大多數情況下,異常會導致某種類型的UI輸出,所以onPostExecute是一個完美的地方。 – 2013-07-15 12:52:23
但如果是的AsyncTask在postExecute上破壞時被調用如何處理它。
這種情況根本就不會發生,因爲這兩種方法都是在UI線程上調用的,這意味着一個方法在調用另一個之前完成。
當您的用戶界面不再可用時(在onDestroy
),取消您的AsyncTask
。您可以檢查AsyncTask
的取消狀態。您還可以在Activity
上查詢isFinishing
。
downvoters請評論 – njzk2
你可以檢查你的活動沒有完成onPostExecute,只有更新UI,如果沒有。 –
@ KunalS.Kushwah不,它不會! AsyncTask是一個後臺運行進程,所以它的'doInbackground()'將會運行,儘管Activity被破壞了! –
@KenWolf如何檢查? – mSO