我正在做一個小遊戲。當我按下後退按鈕activity
將顯示窗口取消遊戲是/否。如何殺死一個Activity和AsyncTask
如果我按是的,我通過finish()
返回到我的MainActivity
。
我的問題是,我無法再次開始遊戲,因爲我的Asynctask沒有完成。我首先必須殺死「最近使用過的應用程序」中的應用程序。
我正在做一個小遊戲。當我按下後退按鈕activity
將顯示窗口取消遊戲是/否。如何殺死一個Activity和AsyncTask
如果我按是的,我通過finish()
返回到我的MainActivity
。
我的問題是,我無法再次開始遊戲,因爲我的Asynctask沒有完成。我首先必須殺死「最近使用過的應用程序」中的應用程序。
您需要實現兩件事情停止執行的AsyncTask:
1.呼叫取消()的AsyncTask的方法,從那裏你想停止執行。這可能在您的Activity的onStop()
中,如下所示:
asyncTask.cancel(true);
2.現在您必須通過在doInBackground方法內使用isCancelled方法來檢查AsyncTask是否被取消。
protected Object doInBackground(Object... x) {
while (/* condition */)
{
...
if (isCancelled())
break;
}
return null;
}
爲什麼?因爲從Android電子文檔下面說明對的AsyncTask的:
取消任務
任務可以在任何時間通過調用 取消(布爾值)被取消。調用此方法將導致對 isCancelled()的後續調用返回true。調用此方法後,將在doInBackground(Object [])返回後調用 onCancelled(Object),而不是onPostExecute(Object) 。如果 可能爲了確保任務 儘快取消,應始終從doInBackground檢查isCancelled(返回 值)定期(對象[]),(內部例如一個循環。)
您需要取消活動的onStop
中的AsyncTask
。
你可以參考這個link取消你的異步任務
我會建議使用surface來編寫實際的遊戲部分而不是活動,這可能會幫助您解決這個問題。
在代碼來處理點擊
1>常用。
感謝您的意見。已經將其用於相機應用程序,但並未考慮將其用於遊戲。 – Nick 2015-02-08 13:31:29