android-java如何取消asynctask

时间:2015-06-28 16:40:46

标签: java android android-asynctask

我有一个执行HttpPost请求的AsyncTask,我有一个字段是人们把他们的电子邮件放进去,并且还有一个检查正确电子邮件的方法。如果电子邮件验证错误,我想要取消我的AsyncTask。我已经尝试了几件事,没有任何作用,这是我的代码..

//check if email is valid
public  boolean isEmailValid(String email) {
    boolean isValid = false;

    String expression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
    CharSequence inputStr = email;

    Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(inputStr);
    if (matcher.matches()) {
        return true;
    }
    return false;
}

// AsyncTask

private class DownloadFilesTask extends AsyncTask<String,String,String> {
    String email;

    @Override
    protected void onPreExecute() {
        super.onPreExecute();
       Email= (EditText)findViewById(R.id.email);
       email= Email.getText().toString().trim();

        if(isEmailValid(email)== false){
            Toast.makeText(Registration.this,"Not a valid Email",Toast.LENGTH_LONG).show();
            // I would like to cancel Async here and return but this is a type Void
        }
    }

    @Override
    protected String doInBackground(String... params) {
       // HttpPost stuff here I return a type String
    }

   // @Override
    protected void onPostExecute(String file_uri) {
      // post stuff
    }
}

我的 onPreExecute()属于void类型,我尝试将其更改为类型Boolean但我在不兼容类型上遇到不匹配。我的doinBackground必须有String类型,因为我正在向 onPostExecute 返回一些东西。如果电子邮件返回false任何建议,我只想中止AsyncTask?

2 个答案:

答案 0 :(得分:2)

IMO你应该在运行asyncTask 之前检查它,但如果你想按照自己的方式进行检查 - 你可以将一些全局变量设置为false并将其返回,然后在{ {1}}方法检查此变量并将其返回doInBackground

众多可能性中的一种:

onPostExecute

答案 1 :(得分:0)

即使您致电AsyncTask,我们也无法取消cancel(true)。该线程将继续在后台运行,但不会返回结果。我已经在一个月内做了自己的实验来取消它。但是,没有什么可以阻止它的线索并让我感到压力。所以我决定转到IntentService

由于AsyncTask仅用于短时间内的单个任务,因此优于使用用于长时间运行任务的IntentService。但是,如果您想停止自己的线程中包含的任务,我建议您使用IntentServiceService