如何在一定时间后取消Android AsyncTask?(例如10秒)

Mel*_*Mel 5 android android-asynctask

我想使用AsyncTask来检查InetAddress,例如在下面的代码中.变量tempInet是一个全局变量,用于指示网站是否可联系.

我用代码开始AsyncTask ... new InetAsyncTask().execute("www.facebook.com");

我的问题是我希望AsyncTask在(比方说)10秒后取消.

其他一些问题建议使用get(10,TimeUnit.SECONDS)方法.我想这样做,但不知道在哪里/如何放置get方法.有执行吗?在doInBackground方法中?

此外,get()方法是否阻止主线程?如果有,那有什么意义呢?

任何帮助赞赏.

 class InetAsyncTask extends AsyncTask<String, String, Boolean> {



    @Override
    protected Boolean doInBackground(String... params) {

        try {                 
                InetAddress.getByName("www.facebook.com");
                return true;          

                } catch (UnknownHostException e) {  
                  return false;
                }

    } //end doInBackground function



    protected void onPostExecute(Boolean... result) {

           tempInet = result[0];

    }


   } //end class
Run Code Online (Sandbox Code Playgroud)

相关问题

Android - 为AsyncTask设置超时?

60秒后停止异步任务

Android开发人员AsyncTask文档

http://developer.android.com/reference/android/os/AsyncTask.html

Ion*_*ers 1

您应该创建一个取消异步任务的处理程序(http://developer.android.com/reference/android/os/AsyncTask.html#cancel(boolean))

向此处理程序发送一条延迟消息,例如:

Handler.sendMessageDelayed(msg, delayMillis)

private android.os.Handler mHandler = new android.os.Handler() {

    @Override
    public void handleMessage(Message msg) {
        (Your AsyncTask object).cancel(true);
    }
}
Run Code Online (Sandbox Code Playgroud)