2015-09-29 5 views
0

Я хочу остановить или отменить AsyncTask, если вызывается onPause. в OnPause:Отменить AsyncTask в фрагменте in onPause

@Override 
    public void onPause() { 
     super.onPause(); 
     Log.e("ONPAUSE", "CALLED"); 
     async.cancel(true); 
    } 

и doBackground:

if (!isCancelled()) { 
       Log.e("RUNNING","TAB3"); 
       try { 
        URL url = new URL(StaticVariables.url_customer_details + CustomerID); 
        Log.e("URL", "is " + url.toString()); 
        HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
        con.setUseCaches(true); 
        String readStream = readStream(con.getInputStream()); 

        System.out.println(readStream); 

        arr = new JSONArray(readStream); 
        for (int i = 0; i < arr.length(); i++) { 
         object = arr.getJSONObject(i); 
        } 
        return readStream; 
       } catch (Exception e) { 
        e.printStackTrace(); 
        return null; 
       } 
      } else { 
       Log.e("CANCELLED","TAB3"); 
       return null; 
      } 

Но журнал никогда не говорят "ОТМЕНА" ..

+0

пример отмены асинтезы http://www.quicktips.in/correct-way-to-cancel-an-asynctask-in-android/ –

ответ

0

Override onCancelled метод в асинхронной задачи, чтобы проверить его отменяется или нет.

@Override 
protected void onCancelled() { 
    Log.e("CANCELLED","TAB3");  
    super.onCancelled(); 
} 

Если вы делаете расчеты:

Вы должны проверить isCancelled() периодически. Но я думаю, что вы не делаете вычислений.

Отмена задачи

Задача может быть отменена в любой момент, вызвав отмены (булево). Вызов этого метода приведет к последующим вызовам isCancelled() в return true.

После вызова этого метода, onCancelled (объект), а не onPostExecute (объект) будет вызван после того, как doInBackground (Object []) возвращается.

Для того, чтобы задача отменена как можно быстрее, вы должны всегда проверять возвращаемое значение isCancelled() периодически от doInBackground (Object []), если это возможно (внутри цикла, например.)

Смежные вопросы