Handler,Runnable和Threads有什么不同?

Hon*_*ang 30 java multithreading android thread-safety android-asynctask

Handler,Runnable和Threads有什么区别?

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

我还看到了一些示例,其中implments可运行并传递给可运行到Threads中.

不过我还是很困惑.有人能给我一个明确的解释吗?

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

Wil*_*son 23

为什么在线程上使用Runnable?

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

    一个Thread有一些状态到您可运行的可能不需要访问.获得更多不必要的状态是糟糕的设计.

    线程占用了大量内存.为每个小动作创建一个新线程需要处理时间来分配和释放这个内存.

runOnUiThread究竟在做什么?

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

    请注意,如果UI线程的队列已满,或者需要执行的项目很长,则可能需要一段时间才能排队Runnable实际运行.

什么是处理程序?

  • 处理程序允许您发布runnables以在特定线程上执行.在幕后,runOnUi Thread Runnable使用Android的Ui Handler 排队,这样你的runnable就可以在UI线程上安全地执行.


Pre*_*rem 10

1.为什么要跑?

Runnable只是一个实例化线程以包含它的接口.而线程已经包含了生成线程的能力.如果扩展Thread,则不能扩展其他任何东西(Java不支持多重继承).您可以在类上拥有多个接口,因此您可以拥有Runnable.

此外,当您扩展Thread类时,每个线程都会创建唯一对象并与之关联.实现Runnable时,它将同一对象共享给多个线程.

2.为什么要使用处理程序,它是什么?

Handler是用Java编写的(内部使用Thread),所以你可以用Handler做的一切,你也可以使用Thread实现.

那么为什么要使用Handler?原因如下

  • Handler允许您发送和处理与线程的MessageQueue关联的Message和Runnable对象.简而言之,处理程序使您的工作变得轻松.

  • Android有两个处理线程的主要规则:

  • 不要阻止UI线程

  • 不要从UI线程外部访问Android UI工具包

要通过上面提到的2个规则进行绑定,在android中我们有3个内置方法可以处理当一个Activity类在不同线程上运行或调用时的情况.

然后,我们可以使用以下三种方法安排UI更新在UI线程上运行.然后,Activity或View作为处理程序(下面的处理程序更多)并将runnable安排到UI线程:

  1. Activity.runOnUiThread(可运行)
    1. View.post(可运行)
    2. View.postDelayed(Runnable,long)//(long =调度时间)

3.什么是UI线程?

UI线程是呈现View和Activity等UI元素的主线程.任何耗时的操作都不应该在UI线程中发生.应用程序默认值在UI Thread中运行.您不需要做任何特殊的事情来使用UI线程.


Ank*_*hag 0

如果可以在Thread的run方法中编写后台代码,那么Runnable还有什么意义呢?

Runnable是一个接口,用于创建新的线程类,类似于通过扩展java.lang.Thread类创建的线程类。唯一的区别是,Runnable接口允许类扩展其他类(如果需要)以覆盖/继承某些类的功能。扩展java.lang.Thread类将撤销此功能。

此外,Runnable 接口表示可以通过普通线程或执行器或任何其他方式执行的任务。因此,将 Task 逻辑分离为 Runnable 而不是 Thread 是一个很好的设计决策。

阅读更多:http://javarevisited.blogspot.com/2012/01/difference-thread-vs-runnable-interface.html#ixzz2qgjDYJhT