3 回答
TA贡献1804条经验 获得超7个赞
是的,有AsyncTask.get()
myDownloader.get(30000, TimeUnit.MILLISECONDS);
请注意,通过在主线程(AKA.UI线程)中调用此函数将阻止执行,您可能需要在单独的线程中调用它。
TA贡献1853条经验 获得超18个赞
在这种情况下,您的下载器基于URL连接,您有许多参数可以帮助您定义超时而无需复杂的代码:
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setConnectTimeout(15000);
urlc.setReadTimeout(15000);
如果仅将此代码带入异步任务中,就可以了。
“读取超时”是在整个传输过程中测试不良网络。
仅在开始时调用“连接超时”以测试服务器是否启动。
TA贡献1871条经验 获得超13个赞
在onPreExecute()方法中,在AsyncTask扩展类的旁边使用CountDownTimer类:
主要优点是,异步监视在类内部完成。
public class YouExtendedClass extends AsyncTask<String,Integer,String> {
...
public YouExtendedClass asyncObject; // as CountDownTimer has similar method -> to prevent shadowing
...
@Override
protected void onPreExecute() {
asyncObject = this;
new CountDownTimer(7000, 7000) {
public void onTick(long millisUntilFinished) {
// You can monitor the progress here as well by changing the onTick() time
}
public void onFinish() {
// stop async task if not in progress
if (asyncObject.getStatus() == AsyncTask.Status.RUNNING) {
asyncObject.cancel(false);
// Add any specific task you wish to do as your extended class variable works here as well.
}
}
}.start();
...
更改CountDownTimer(7000,7000)-> CountDownTimer(7000,1000)例如,它将在调用onFinish()之前调用onTick()6次。如果要添加一些监视,这很好。
感谢您在此页面中提供的所有好的建议:-)
添加回答
举报