我有一个线程连接到一个 url 以获取一些数据。
有时方法httpConnection.connect();
花了太多时间才得到响应,我想将此连接线程的加载对话框限制为 5 段。
我尝试在代码中添加超时,但它不起作用!!
URL formattedUrl = new URL(url);
URLConnection connection = formattedUrl.openConnection();
connection.setConnectTimeout(5000);
connection.setReadTimeout(5000);
HttpURLConnection httpConnection = (HttpURLConnection) connection;
httpConnection.setAllowUserInteraction(false);
httpConnection.setInstanceFollowRedirects(true);
httpConnection.setRequestMethod("GET");
httpConnection.setConnectTimeout(5000);
httpConnection.setReadTimeout(5000);
httpConnection.connect();
因此,当 5000 秒过去或用户按下手机上的后退键时,我必须停止连接方法和线程。
如何才能实现这一目标?我找不到有关在 android 中使用 url 连接线程执行此工作的信息。
thanks
URLConnection 上的超时设置不足以提供所需的超时控制。原因是:
将超时应用于整个读取工作单元的一种解决方案是使用 Java 5 及更高版本中的并发功能。特别是,使用执行服务 http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/ExecutorService.html and Future http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/Future.html应该足够了。
Runnable task = new Runnable() {
public void run() {
// original code to read data from a URL
}
};
ExecutorService executor = Executors.newSingleThreadExecutor(); // or any other implementation
Future<?> future = executor.submit(task);
try {
future.get(5, TimeUnit.SECONDS); // wait 5 seconds for task to complete
// success
} catch (TimeoutException ex) {
// handle timeout
} finally {
executor.shutdownNow(); // cleanup
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)