0

私はここと同じ状況を抱えています: Android AsyncTask はキャンセル時に停止しません。なぜですか?

数秒後に AsyncTask を強制終了するようにタイマーを設定しました。Android 2.3.5では完全に動作します(設定したタイムアウト後にタスクはキャンセルされます)が、何らかの理由でAndroid 4以降では動作しません)

これは関連するコードです (すべて AsyncTask クラス内にあります)。

private class TaskKiller extends TimerTask {
    private AsyncTask<?, ?, ?> mTask;
    public TaskKiller(AsyncTask<?, ?, ?> task) {
        mTask = task;
    }
    public void run() {
        mTask.cancel(true);
    }
}

@Override
protected String doInBackground(Void... nothing) {
    // Setting the Task timeout.
    Timer timer = new Timer();
    timer.schedule(new TaskKiller(this), 3000);

    response = HttpRequest(url); // this method makes an HttpPost request.
    // This, I think, is where android 4+ is unable to cancel the task (while making the http request). It is perfectly cancelled in 2.3.5, though.
}

@Override
protected void onCancelled() {
    Log.e("TASK CANCELED","...");
}

Android 2.3では魅力的に機能しています。

Android 4+で動作させる方法についての手がかりはありますか?

4

1 に答える 1

1
private HttpUriRequest mRequest;


protected String doInBackground(Void... nothing) {
    ...
    mRequest = new HttpGet(url); // or HttpPost
    response = client.execute(mRequest);
    ...
}

private void myCancelationRoutine() {
      mRequest.cancel();
      mTask.cancel();
}
于 2013-06-26T04:49:25.527 に答える