线程和处理程序之间的区别是什么?

21

我想了解线程(thread)和处理程序(handler)之间的区别。创建新的处理程序是否会创建新的线程?使用post()运行新的处理程序时,是否会创建一个新的线程?请解释一下。

3个回答

21

线程是一种通用的处理任务,可以完成大多数操作,但它们不能更新UI。

另一方面,处理程序绑定到线程,允许您与UI线程通信(更新UI)。

例如,通过消息(Runnable)发布到处理程序,显示Toast或更新进度条,但如果将此运行作为线程启动,则无法执行此操作。

使用处理程序,您还可以拥有诸如消息队列、调度和重复等功能。

我还没有遇到需要在Android中使用线程的情况。

我主要使用AsyncTasks和Handlers的组合。

Handlers用于上述任务。

AsyncTasks用于下载/数据获取、轮询等操作。

您可以在这里阅读开发人员文章 "Painless Threading" ,了解更多关于在Android中使用线程。

更正:每个Handler实例都与一个单独的线程及其消息队列相关联。它们不代表自己的线程,如此描述here


2

一个线程定义了一个正在运行的进程,就像在Android中有一个主UI线程,而所有其他线程都在后台运行(并行运行)。

Handler完全不同,它就像是启动处理程序中定义的任务。

为了澄清你的困惑,并在Android中执行线程,你必须阅读:http://android-developers.blogspot.com/2009/05/painless-threading.html

我建议在所有情况下都使用AsyncTask而不是使用Thread。


0

为什么我们要在线程中使用处理程序:

当我们在Android中安装应用程序时,它会为该应用程序创建一个名为“主UI线程”的线程,所有活动都在该线程内运行。根据Android的单线程模型规则,我们不能直接访问在该活动内定义的另一个线程的UI元素(位图、文本视图等)。

因此,如果我们想要通过另一个线程访问主UI线程元素,则需要使用处理程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接