在onPause中取消片段中的AsyncTask

时间:2015-09-29 18:55:11

标签: android android-asynctask

如果调用onPause,我想停止或取消AsyncTask。 在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;
            }

但是日志永远不会说&#34;取消&#34; ..

1 个答案:

答案 0 :(得分:0)

异步任务中覆盖 onCancelled 方法,检查其是否已取消。

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

如果您正在进行计算:

您必须定期检查 isCancelled()。但我想,你不是在做计算。

  

取消任务

     

可以通过调用cancel(boolean)随时取消任务。   调用此方法将导致后续调用isCancelled()   返回true。

     

调用此方法后,取消onCancelled(Object)   在doInBackground(Object [])之后将调用onPostExecute(Object)   回报。

     

为确保尽快取消任务,您应该这样做   总是定期检查isCancelled()的返回值   doInBackground(Object []),如果可能的话(例如在循环内)。