我执行了一个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后,将启动一个新的处理程序,如果AsyncTask仍在运行,该处理程序将在30秒后取消AsyncTask.

这是一个好方法吗?或者AsyncTask中是否有更适合这一目的的东西?

推荐答案

是的,有AsyncTask.get()

myDownloader.get(30000, TimeUnit.MILLISECONDS);

请注意,通过在主线程(AKA.UI线程)将挡路执行,您可能需要在单独的线程中调用它.

Android相关问答推荐

更新画布上的绘图以具有水平填充

编写视觉转型

derivedStateOf与使用key和MutableState记住

无法从API访问项目详细信息

如何禁用Android 34+版的TileService,但保留以前的版本?

Jetpack编写使用自定义主题覆盖库中主题部分

Android Gradle/Groovy,如何将文件复制到APK

在c中更新MVVMCross中TextView的Alpha#

在java android studio项目上安装mapbox

错误:参数的类型必须是用@Entity注释的类或其集合/array. java.lang.String tocd);

减少Compose中可滚动选项卡之间的间距

Android Studio电鳗:javaHome好像无效

如何只允许拖动 BottomSheetScaffold 中 BottomContent 的 SheetPeek 的一部分?

如何在组件之间导航

在 Jetpack Compose 中清除列表时可组合不重组

Compose Accompaniist Pager 中的 TabRow/Tab 重组问题

处理程序 postDelayed 方法不起作用,kotlin 应用程序卡在启动画面上

记住或不记得derivedStateOf

Jetpack Compose:SpanStyle 的 TextAlign(垂直居中)

如何在 compose 中使用 BottomSheetScaffold 为底页设置半展开高度?