我想使用 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
相关问题
Android - Setting a Timeout for an AsyncTask?
stop async task after 60 second
Android 开发者 AsyncTask 文档
http://developer.android.com/reference/android/os/AsyncTask.html
最佳答案
您应该创建一个取消 Asynctask 的处理程序 (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);
}
}
关于android - 如何在一定时间后取消 Android AsyncTask? (例如 10 秒),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9839501/