Android 在UI线程上加载和创建AsyncTask有什么区别?

Android 在UI线程上加载和创建AsyncTask有什么区别?,android,android-asynctask,Android,Android Asynctask,在阅读关于线程规则的部分时,我发现: 必须在UI线程上加载AsyncTask类。这已经完成了 就像果冻豆一样 必须创建任务实例 在UI线程上 必须在UI线程上调用execute(参数…) “加载”是什么意思?它不是实例化或执行,正如文档稍后讨论的那样。我不认为这是正确的 文档单独列出实例化和加载是没有意义的,如果它们实际上是相同的。我相信这种说法 必须在UI线程上加载AsyncTask类 指的是。换句话说,AsyncTask类本身需要加载到主线程上。在果冻豆(或更高版本)中,这是自动的。但是

在阅读关于线程规则的部分时,我发现:

  • 必须在UI线程上加载AsyncTask类。这已经完成了 就像果冻豆一样
  • 必须创建任务实例 在UI线程上
  • 必须在UI线程上调用execute(参数…)
“加载”是什么意思?它不是实例化或执行,正如文档稍后讨论的那样。

我不认为这是正确的

文档单独列出实例化和加载是没有意义的,如果它们实际上是相同的。我相信这种说法

必须在UI线程上加载AsyncTask类

指的是。换句话说,
AsyncTask
类本身需要加载到主线程上。在果冻豆(或更高版本)中,这是自动的。但是,在旧版本的Android中,这个类有可能被加载到另一个线程上,这可能会导致问题

了解更多信息。基本上,有一些条件(例如,使用
IntentService
的代码)会导致
AsyncTask
首先加载到错误的(非主)线程上

在使用果冻豆之前,最简单的修复方法似乎是使用以下内容:

Class.forName("android.os.AsyncTask");
在应用程序中,强制在需要时加载类


创建
AsyncTask
实例可能就是您认为的那样。。。举例说明:

MyAsyncTask task = new MyAsyncTask();
这也应该在主线程上运行