Android:用于Web服务的AsyncTask不会在片段中取消

时间:2015-05-27 08:00:23

标签: android android-fragments android-asynctask

我有一个片段,我在其中执行AsyncTask来从Web服务获取json响应。

我想取消片段的AsyncTask,为asynctask调用cancel函数,但它不起作用:

@Override
public void onDetach() {
    // TODO Auto-generated method stub
    super.onDetach();

    if(wsClient != null && wsClient.getStatus() == Status.RUNNING && !wsClient.isCancelled())
        wsClient.cancel(true);

}

@Override
public void onStop() {
    // TODO Auto-generated method stub
    super.onStop();
    if(wsClient != null && wsClient.getStatus() == Status.RUNNING && !wsClient.isCancelled())
        wsClient.cancel(true);
}

2 个答案:

答案 0 :(得分:0)

你应该自己检查isCancelled()。调用cancel()不会中断你的asyncTask。

  

可以通过调用cancel(boolean)随时取消任务。   调用此方法将导致后续调用isCancelled()   返回true。在调用此方法之后,改为onCancelled(Object)   之后将调用onPostExecute(Object)   doInBackground(Object [])返回。确保取消任务   你应该尽快检查返回值   如果可能的话,定期从doInBackground(Object [])获取isCancelled()   (例如在循环内部。)

请参阅http://developer.android.com/reference/android/os/AsyncTask.html

答案 1 :(得分:0)

尝试在onPause方法中运行cancel()函数。祝你好运。