activity 如何在返回时取消异步任务

how to cancel the asynchronous task on back press in activity

一个activity有三个片段。第三个片段有异步任务。 activity 如何在返回时取消异步任务。

public void onBackPressed() {

            android.app.Fragment currentVisibleFragment = getFragmentManager().findFragmentById(R.id.container);
            if(currentVisibleFragment != null) {
                String visibleFragmentName = currentVisibleFragment.toString();
                if (visibleFragmentName.contains(LearnToWriteLetterUtils.TAMIL_LEARN_TO_WRITE_FLASHSCREEN)) {

                    Log.d("app finished", "finished");
                    finish();
                } else if (visibleFragmentName.contains(LearnToWriteLetterUtils.TAMIL_LEARN_TO_WRITE_INDEXPAGE)) {
                    Log.d("app finished", "exit");
                    finish();
                } else if (visibleFragmentName.contains(LearnToWriteLetterUtils.TAMIL_LEARN_TO_WRITE_LOADING_SCREEN)){

                    getFragmentManager().beginTransaction().replace(R.id.container, tamilLearnToWriteIndexPage, LearnToWriteLetterUtils.TAMIL_LEARN_TO_WRITE_INDEXPAGE).commit();
                }
            }
    }

试试这个:

 public void onBackPressed()
 {
    myTask.cancel(true);
 }

Fragment 中保留一个名为 mIsCanceled 的字段变量。在后退时,将其设置为 true(通过使用方法调用。也许写一个方法 cancelTask())。在异步任务中继续检查mIsCanceled,如果为真则退出。

正在取消任务: 可以通过调用 cancel(boolean) 随时取消任务。 调用此方法将导致对 isCancelled() 的后续调用为 return true。调用此方法后,onCancelled(Object), 而不是 onPostExecute(Object) 将在 doInBackground(Object[]) returns 之后被调用。 为确保尽快取消任务,您应该始终定期从 doInBackground(Object[]) 检查 isCancelled() 的 return 值, 如果可能(例如在循环内。)