如果我们查看源代码,我们将看到AsyncTask
并且Handler
纯粹是用Java编写的。(尽管有一些例外。但这并不重要)
因此,AsyncTask
或中没有魔术Handler
。这些课程使我们作为开发人员的生活更加轻松。
例如:如果程序A调用方法A(),则方法A()可以与程序A在不同的线程中运行。我们可以通过以下代码轻松地进行验证:
Thread t = Thread.currentThread();
int id = t.getId();
我们为什么要对某些任务使用新线程?你可以用谷歌搜索它。原因很多,例如:繁重,长期运行。
那么,什么是之间的差异Thread
,AsyncTask
以及Handler
?
AsyncTask
并且Handler
是用Java编写的(内部使用Thread
),因此我们可以使用Handler
或进行的所有操作AsyncTask
也可以使用来实现Thread
。
有什么可以Handler
和AsyncTask
真正的帮助?
最明显的原因是调用者线程和工作线程之间的通信。(Caller Thread:一个调用Worker线程执行某些任务的线程。Caller线程不必一定是UI线程)。当然,我们可以通过其他方式在两个线程之间进行通信,但是由于线程安全性,存在许多缺点(和危险)。
这就是为什么我们应该使用Handler
和AsyncTask
。这些类为我们完成了大部分工作,我们只需要知道要覆盖哪些方法即可。
Handler
和之间的区别AsyncTask
是:AsyncTask
当调用者线程是UI线程时使用。这就是android文档所说的:
通过AsyncTask,可以正确,轻松地使用UI线程。此类允许执行后台操作并在UI线程上发布结果,而无需操纵线程和/或处理程序
我想强调两点:
1)易于使用的UI线程(因此,在调用者线程为UI线程时使用)。
2)无需操纵处理程序。(意味着:您可以使用Handler而不是AsyncTask,但是AsyncTask是一个更简单的选项)。
这篇文章中有很多事情我还没有说,例如:什么是UI Thread,或者为什么它更容易。您必须了解每个类背后的一些方法并使用它们,您将完全理解其原因。
@:阅读Android文档时,您将看到:
处理程序允许您发送和处理与线程的MessageQueue相关的Message和Runnable对象
起初,这种描述可能看起来很奇怪。我们只需要了解每个线程都有每个消息队列(如待办事项列表),线程就会接收每个消息并执行直到消息队列为空(就像我们完成工作并上床睡觉一样)。因此,在进行Handler
通信时,它仅向呼叫者线程提供一条消息,它将等待处理。
复杂?请记住,Handler
可以安全地与调用方线程进行通信。