java - Handler、Runnable 和 Threads 之间有什么区别?

标签 java android multithreading android-asynctask thread-safety

Handler、Runnable、Threads有什么区别?

当我使用 android 时,我需要在后台运行一些东西。我使用线程来运行它。通常我会写一个扩展 Thread 的类并实现 run 方法。

我还看到了一些实现 runnable 并将 runnable 传递给 Threads 的示例。

但是我仍然很困惑。谁能给我一个明确的解释?

  1. 如果可以在 Thread 的 run 方法中编写后台代码,那么 Runnable 的意义何在?
  2. Handler在线程内部是如何使用的,为什么要使用它。
  3. Android 还有一个东西叫runOnUiThread,我们怎么用呢?我知道它是用来更新 UI 的。

最佳答案

为什么使用 Runnable over Thread?

  • Runnable 将需要异步运行的代码与 如何 运行代码分开。这使您的代码保持灵活。例如,runnable 中的异步代码可以在线程池或专用线程上运行。

    一个 Thread 有你的可运行可能不需要访问的状态。获得比必要更多的状态是糟糕的设计。

    线程占用大量内存。为每个小 Action 创建一个新线程需要处理时间来分配和释放此内存。

runOnUiThread 实际上在做什么?

  • Android 的 runOnUiThread排队 Runnable 以在 UI 线程上执行。这很重要,因为您永远不应该从多个线程更新 UI。 runOnUiThread 使用 Handler

    请注意,如果 UI 线程的队列已满,或者需要执行的项目很长,那么您的排队 Runnable 可能需要一段时间才能真正运行。

什么是处理程序?

  • 处理程序允许您发布可在特定线程上执行的可运行文件。在幕后,runOnUi Thread 将您的 Runnable 与 Android 的 Ui 处理程序一起排队,以便您的 runnable 可以在 UI 线程上安全地执行。

关于java - Handler、Runnable 和 Threads 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21194762/

相关文章:

java - 如何将 R.color 转换为 Color?

java - 调用另一个类的main方法

java - Android Sign APK With Upload Certificate(如何确保指纹正确)

C++ `Timer` 类实现

java - 线程仅在第二次运行时工作

java - 从数组中挑选值(value)最高和值(value)最低的一天时遇到麻烦

java - Android 细节 fragment

Android studio 将本地化资源中的字符串(在 Textview 中)的一部分作为可点击的 url?

c - 如何从另一个线程调用 Gtk API?

c++ - 有没有办法通过模板参数自动解析重载方法?