2017-08-12 63 views
1

我的应用程序中有很少的网络活动,例如数据库操作,发送/接收文件等。我如何限制这些活动的执行时间?例如,如果到服务器的文件传输操作在1分钟内未完成,那么我想中止该操作并继续执行剩余的代码。你能为此提供一些参考吗?如何在android中限制网络活动的执行时间?

回答

1

根据http客户端的类型,您可以设置操作超时并处理超时异常。

这里是很好的解释了如何处理超时的OkHttp:你在你的HTTP客户端更喜欢,像例如在上述Retrofit and OkHttpClient, catch connection timeout in failure method

  1. 设置超时时间:超时异常 client.setConnectTimeout(10, TimeUnit.SECONDS); client.setReadTimeout(30, TimeUnit.SECONDS);

  2. 集处理器(取决于你的http客户端)。

如果您需要自定义操作超时处理,您可以用执行人跟踪如果后台操作完成与否,这样你就可以实现通用的解决方案来扩展与超时任何后台操作,想法很有趣的解释可以发现这里:ExecutorService that interrupts tasks after a timeout

快乐编码!

0

你可以采取下面的代码的帮助:

HttpURLConnection urlc = (HttpURLConnection) urlConnect.openConnection(); 
urlc.setConnectTimeout(1000); //milliseconds 
urlc.setReadTimeout(1000); //milliseconds 

根据Java手册:

connectTimeout

设置一个指定的超时值,以毫秒为单位,使用当打开通往此URLConnection引用的资源的通信链接时。如果在建立连接之前超时到期,则会引发java.net.SocketTimeoutException。超时为零被解释为无限超时。

readTimeout

将读超时设置为指定的超时,以毫秒为单位。非零值指定在连接建立到资源时从输入流读取时的超时时间。如果在有数据可供读取之前超时到期,则会引发java.net.SocketTimeoutException。超时为零被解释为无限超时。

0

我会建议使用okHttp作为okHttp从Android 4.4强大HttpURLConnection。 这里是代码 - >

OkHttpClient client = new OkHttpClient(); 
client.setConnectTimeout(15, TimeUnit.SECONDS); // connect timeout 
client.setReadTimeout(15, TimeUnit.SECONDS); // socket timeout 
相关问题