猿问

处理程序对AsyncTask与线程

处理程序对AsyncTask与线程

我有点搞不懂HandlersAsyncTaskThreads在机器人里。我在这里读过很多博客和问题。

Handler是为您提供与UI通信的后台线程。例如,更新进度条应该通过Handler..使用您有优势的处理程序MessagingQueues,因此,如果您想安排消息或更新多个UI元素或具有重复任务。

AsyncTask是相似的,事实上他们利用Handler,但在UI线程中不运行,因此它有利于获取数据,例如获取Web服务。稍后,您可以与UI交互。

Thread但是不能与UI交互,提供更多的“基本”线程,而忽略了AsyncTask.

但是,我希望在服务中运行套接字连接。应该在处理程序或线程中运行,甚至是在AsyncTask?UI交互根本不需要。这对我所用的性能有影响吗?

同时文献资料已经有了很大的改进。


慕村9548890
浏览 250回答 3
3回答

子衿沉夜

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

心有法竹

在深度观察后,它是笔直向前的。AsyncTask:这是一种使用线程的简单方法不了解java线程模型. AsyncTask分别给出工作线程和主线程的各种回调。用于小型等待操作,如下所示:从Web服务中获取一些数据并显示在布局上。数据库查询当你意识到运行操作永远不会嵌套。Handler:当我们在Android中安装一个应用程序时,它会为该应用程序创建一个名为MainUIThread的线程。所有活动都在该线程中运行。通过Android单线程模型规则,我们不能访问UI元素(位图、文本视图等)直接用于在该活动中定义的另一个线程。Handler允许您从其他后台线程返回UI线程。这在Android中很有用,因为Android不允许其他线程直接与UI线程通信。处理程序可以发送和处理与线程的MessageQueue相关联的消息和可运行对象。每个Handler实例都与单个线程和该线程的消息队列相关联。当创建一个新的Handler时,它被绑定到创建它的线程/消息队列。这是最适合:它允许您执行消息队列。消息调度。Thread:现在是讨论线程的时候了。线程是两个线程的父级。AsyncTask和Handler..它们都在内部使用线程,这意味着您还可以创建自己的线程模型。喜欢AsyncTask和Handler,但这需要对Java的多线程实现.
随时随地看视频慕课网APP

相关分类

Android
我要回答