如何停止asyncTask android

时间:2016-04-07 11:25:06

标签: java android android-asynctask

在我的android项目中,我在一个活动中使用了很多AsynTask。当我开始其他时,我需要停止一个AsynTask

我在我的android项目中使用myAsynTask.cancel(true);。但它确实会阻止AsynTask

protected String doInBackground(String... args) {

        HashMap<String, String> params = new HashMap<>();
        params.put("id", args[0]);

        Log.d("get value: ", params.toString());

        JSONObject json = jParser.makeHttpRequest(url_comment, "GET", params);

        Log.d("All matches: ", json.toString());

        if(isCancelled()) {
            finish();
        }
        else {

            try {

                int success = json.getInt(TAG_SUCCESS);
                if (success == 1) {

                    JSONmatches = json.getJSONArray(TAG_vedio);

                    for (int i = 0; i < JSONmatches.length(); i++) {
                        JSONObject c = JSONmatches.getJSONObject(i);

                        String title = c.getString(TAG_title);
                        String url = c.getString(TAG_url);

                        HashMap<String, String> map = new HashMap<String, String>();

                        map.put(TAG_title, title);
                        map.put(TAG_url, url);

                        arrayList22.add(map);
                    }
                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

2 个答案:

答案 0 :(得分:1)

isCancelled执行循环时,您必须主动检查doInBackground

如果break为真,你应该isCanceled循环。

答案 1 :(得分:1)

来自官方Android documentation

  

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