如果你看到 Asyntask 和 Handler 的源代码,你会看到它们的代码纯粹是用 Java 编写的。(当然,也有一些例外,但这不是重点)。
为什么是这个意思?这意味着在 Asyntask 或 Handler 中没有魔法。它们只是让您作为开发人员的工作更轻松。
例如:如果 ProgramA 调用 methodA(),methodA() 将与 ProgramA 在不同的线程中运行。您可以通过以下方式轻松测试:
Thread t = Thread.currentThread();
int id = t.getId();
为什么你应该使用新线程?你可以google一下。很多很多原因。
那么区别是什么呢 ?
AsyncTask 和 Handler 是用 Java 编写的(内部使用 Thread),所以你可以用 Handler 或 AsyncTask 做的所有事情,你也可以使用 Thread 来实现。
什么 Handler 和 AsyncTask 真正帮助你?
最明显的原因是调用者线程和工作线程之间的通信。(调用者线程:调用工作线程执行某些任务的线程。调用者线程可能并不总是 UI 线程)。而且,当然,您可以通过其他方式在两个线程之间进行通信,但是有很多缺点,例如:主线程不是线程安全的(在大多数情况下),换句话说,是危险的。
这就是为什么你应该使用 Handler 和 AsyncTask。他们为您完成大部分工作,您只需要知道要覆盖哪些方法。
Handler 和 AsyncTask 的区别:当 Caller 线程是 UI Thread 时使用 AsyncTask。这是android文档所说的:
AsyncTask enables proper and easy use of the UI thread. This class allows to perform background operations and publish results on the UI thread without having to manipulate threads and/or handlers
我想强调两点:
1)UI线程的易用性(所以,当调用者线程是UI线程时使用)。
2)无需操纵处理程序。(意味着:您可以使用 Handler 代替 AsyncTask,但 AsyncTask 是一个更简单的选择)。
这篇文章中有很多东西我还没有说,例如:什么是 UI 线程,为什么它更容易。你必须知道每种背后的一些方法并使用它,你会完全理解为什么..
@:当你阅读Android文档时,你会看到:
Handler allows you to send and process Message and Runnable objects associated with a thread's MessageQueue
起初它们可能看起来很奇怪。请理解,每个线程都有每个消息队列。(如待办事项列表),线程将接收每条消息并执行此操作,直到消息队列为空。(啊,也许就像你完成工作上床睡觉一样)。因此,当 Handler 通信时,它只是给调用者线程一个消息,它会等待处理。(复杂?但你只知道,Handler 可以以安全的方式与调用者线程通信)