【问题标题】:Threading rules for an AsyncTask to work properly, Rule 1 and Rule 5?AsyncTask 正常工作的线程规则,规则 1 和规则 5?
【发布时间】:2021-11-01 10:49:01
【问题描述】:

我试图通过 android 提供的关于 AsyncTask 的文档,尽管它有点难以理解,但我遇到的是 AsyncTask 正常工作的线程规则。

我把链接贴在这里; https://developer.android.com/reference/android/os/AsyncTask.html#threading-rules

这里是规则;

要使此类正常工作,必须遵循一些线程规则:

  1. 必须在 UI 线程上加载 AsyncTask 类。这是从 Build.VERSION_CODES.JELLY_BEAN 开始自动完成的。

  2. 任务实例必须在 UI 线程上创建。

  3. execute(Params...) 必须在 UI 线程上调用。

  4. 不要手动调用 onPreExecute()、onPostExecute(Result)、doInBackground(Params...)、onProgressUpdate(Progress...)。

  5. 该任务只能执行一次(如果尝试第二次执行,将抛出异常。)

我也理解规则 2、3 和 4。

我不明白的是规则 1 和 5。

扩展 AsyncTask 的类是在 UI 线程上创建的实例(例如 onCreate()) - 规则 2

他们想在规则 1 中表达什么?
它是如何在我们不提的情况下自动加载的?

按照规则 5,他们是说,扩展 AsyncTask 的类的单个实例可以执行一次,如果我们想再执行一次,我们是否必须创建同一个类的另一个实例?

谢谢

【问题讨论】:

标签: java android multithreading android-asynctask android-threading


【解决方案1】:

整个类已被弃用,你不应该再使用它了。

规则 5 意味着 AsyncTask 的单个实例只能运行一次。您需要创建另一个实例才能再次运行它。

规则 1 是关于加载类的 Java 类对象。这会在需要时自动发生,并且每次执行应用程序都会发生一次。除非您在做一些奇怪的事情,否则您实际上不需要担心这一点。

【讨论】:

  • “这会在需要时自动发生,并且每次执行应用程序都会发生一次”。这是什么意思,当需要和发生时?
  • class 文件从 dex 文件加载到内存中,以便 JVM 可以使用它。这是通过类加载器完成的,默认情况下在幕后为您完成(如果需要,您可以自定义)。除非您真正了解 JVM 的工作原理,否则不要担心。
猜你喜欢
  • 2019-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多