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