Hon*_*ang 30 java multithreading android thread-safety android-asynctask
Handler,Runnable和Threads有什么区别?
当我使用android时,我需要在后台运行一些东西.我使用Threads来运行它.通常我会编写一个扩展Thread的类并实现run方法.
我还看到了一些示例,其中implments可运行并传递给可运行到Threads中.
不过我还是很困惑.有人能给我一个明确的解释吗?
Wil*_*son 23
为什么在线程上使用Runnable?
Runnable分离需要异步运行,从代码如何运行代码.这使您的代码保持灵活性.例如,runnable中的异步代码可以在线程池或专用线程上运行.
一个Thread有一些状态到您可运行的可能不需要访问.获得更多不必要的状态是糟糕的设计.
线程占用了大量内存.为每个小动作创建一个新线程需要处理时间来分配和释放这个内存.
runOnUiThread究竟在做什么?
Android的runOnUiThread排队a Runnable在UI线程上执行.这很重要,因为您永远不应该从多个线程更新UI. runOnUiThread用一个Handler.
请注意,如果UI线程的队列已满,或者需要执行的项目很长,则可能需要一段时间才能排队Runnable实际运行.
什么是处理程序?
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线程
要通过上面提到的2个规则进行绑定,在android中我们有3个内置方法可以处理当一个Activity类在不同线程上运行或调用时的情况.
然后,我们可以使用以下三种方法安排UI更新在UI线程上运行.然后,Activity或View作为处理程序(下面的处理程序更多)并将runnable安排到UI线程:
3.什么是UI线程?
UI线程是呈现View和Activity等UI元素的主线程.任何耗时的操作都不应该在UI线程中发生.应用程序默认值在UI Thread中运行.您不需要做任何特殊的事情来使用UI线程.
如果可以在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
| 归档时间: |
|
| 查看次数: |
27241 次 |
| 最近记录: |