如何在onPreExecute上停止Asyn任务?

时间:2016-03-14 08:32:30

标签: android json xml

我正在检查onPreExecute()中的互联网连接状态,如果没有互联网连接,则不应执行doInBackground()和onPostExecute()

new getStatus().execute();

private class getStatus extends AsyncTask<Void, Void, Void> {

3 个答案:

答案 0 :(得分:4)

您在onPreExecute的AsyncTask中设置了一个标志。检查其他两个函数中的该标志,如果该标志为真,则立即返回。

答案 1 :(得分:1)

这样做:

public boolean hasInternetConnection(final Context context) {
    final ConnectivityManager connectivityManager = (ConnectivityManager)context.
            getSystemService(Context.CONNECTIVITY_SERVICE);
    final NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
    boolean isConnected = networkInfo.isConnectedOrConnecting() && networkInfo.isAvailable() && networkInfo.isConnected();
    return isConnected;
}

将它放在onCreate()或任何你想要执行任务的地方,取决于结果如下:

if(hasInternetConnection(YourActivity.this){
   //executeTask
}else{
   //redirect user to Wifi Settings with dialog
}

希望它有所帮助!!!

答案 2 :(得分:1)

由于Internet连接可以随时消失,为什么不简单地执行任务并处理IOException呢?如果没有连接,我想发出一个http请求或者你正在做的任何事情都会立即失败。您甚至可以在尝试之前添加一个检查,但是这样的检查不应该在网络请求期间替换错误处理。

我可能会将所有逻辑放在doInBackground中。如果我首先添加连接检查,我将以与实际请求期间发生的任何网络异常相同的方式处理它。 至于实际的错误处理,您可以将错误代码存储为asynctask中的成员,您可以让asynctask在包含数据和错误代码的自定义类上工作,或者甚至可以让doInBackground在出现错误时返回null并且直接从doInBackground处理错误。