2015-02-08 129 views
0

我正在做一個小遊戲。當我按下後退按鈕activity將顯示窗口取消遊戲是/否如何殺死一個Activity和AsyncTask

如果我按是的,我通過finish()返回到我的MainActivity

我的問題是,我無法再次開始遊戲,因爲我的Asynctask沒有完成。我首先必須殺死「最近使用過的應用程序」中的應用程序。

回答

1

您需要實現兩件事情停止執行的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(返回 值)定期(對象[]),(內部例如一個循環。)

2

您需要取消活動的onStop中的AsyncTask

1

我會建議使用surface來編寫實際的遊戲部分而不是活動,這可能會幫助您解決這個問題。

+0

感謝您的意見。已經將其用於相機應用程序,但並未考慮將其用於遊戲。 – Nick 2015-02-08 13:31:29

0

在代碼來處理點擊

  • 1>呼叫完成(),並使用上AsyncTask.cancel的onStop()或的onDestroy()方法()。
  • 或2>使用AsyncTask.cancel(),並在AsyncTask.onCancelled()方法中,調用finish()來結束活動。

1>常用。