Android 如何为AsyncTask设置超时?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

我有一个AsyncTask类可以从网站下载大量数据。

如果最终用户在使用时的数据连接速度非常缓慢或不稳定,我想AsyncTask在一段时间后超时。我的第一个方法是这样的:

MyDownloader downloader = new MyDownloader();
downloader.execute();
Handler handler = new Handler();
handler.postDelayed(new Runnable()
{
  @Override
  public void run() {
      if ( downloader.getStatus() == AsyncTask.Status.RUNNING )
          downloader.cancel(true);
  }
}, 30000 );

启动后AsyncTask,一个新的处理程序被启动,将取消AsyncTask30秒后,如果它仍在运行。

提问于
用户回答回答于

是的,有AsyncTask.get():

myDownloader.get(30000, TimeUnit.MILLISECONDS);

请注意,通过在主线程(AKA。UI线程)中调用此函数将阻止执行,你可能需要在单独的线程中调用它。

用户回答回答于

在这种情况下,你的下载程序基于URL连接,你可以使用许多参数来帮助你定义没有复杂代码的超时:

  HttpURLConnection urlc = (HttpURLConnection) url.openConnection();

  urlc.setConnectTimeout(15000);

  urlc.setReadTimeout(15000);

如果你只是把这个代码放到你的异步任务中,那就没问题。

扫码关注云+社区