为了账号安全,请及时绑定邮箱和手机立即绑定

处理程序对AsyncTask与线程

处理程序对AsyncTask与线程

慕村9548890 2019-06-23 15:51:12
处理程序对AsyncTask与线程我有点搞不懂Handlers, AsyncTask和Threads在机器人里。我在这里读过很多博客和问题。Handler是为您提供与UI通信的后台线程。例如,更新进度条应该通过Handler..使用您有优势的处理程序MessagingQueues,因此,如果您想安排消息或更新多个UI元素或具有重复任务。AsyncTask是相似的,事实上他们利用Handler,但在UI线程中不运行,因此它有利于获取数据,例如获取Web服务。稍后,您可以与UI交互。Thread但是不能与UI交互,提供更多的“基本”线程,而忽略了AsyncTask.但是,我希望在服务中运行套接字连接。应该在处理程序或线程中运行,甚至是在AsyncTask?UI交互根本不需要。这对我所用的性能有影响吗?同时文献资料已经有了很大的改进。
查看完整描述

3 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

如果您查看AsyncTaskHandler,您将看到他们的代码完全是用Java编写的。(当然,也有一些例外,但这并不重要。)

所以没有魔法AsyncTaskHandler..他们只是使你的工作更容易作为一个开发人员。

例如:如果ProgramA调用方法A(),则方法A()可以在程序A的不同线程中运行,您可以使用以下方法轻松地验证它:

Thread t = Thread.currentThread();    int id = t.getId();

为什么要使用新线程?你可以用谷歌搜索。有很多原因。

那么,ThreadAsyncTask,和Handler?

AsyncTaskHandler是用Java编写的(在内部,他们使用Thread),所以你能做的每一件事HandlerAsyncTask,您可以使用Thread我也是。

什么能HandlerAsyncTask真的帮你?

最明显的原因是调用线程和工作线程之间的通信。(调用线程:一个线程,它调用工线去执行一些任务。调用线程不一定非得是UI线程)。当然,您可以通过其他方式在两个线程之间进行通信,但是由于线程安全问题,有许多缺点(和危险)。

所以你应该用HandlerAsyncTask..他们为你做了大部分的工作,你只需要知道什么方法可以覆盖。

.之间的区别HandlerAsyncTaskIS:使用AsyncTask什么时候调用线程UI线程..这就是Android文档中所说的:

AsyncTask允许正确和容易地使用UI线程。这个类允许在UI线程上执行后台操作和发布结果,而不必操作线程和/或处理程序。

我想强调两点:

1)很容易使用UI线程(所以,当调用者线程是UI线程时使用)。

2)不需要操纵处理程序。(意思是:您可以使用Handler而不是AsyncTask,但是AsyncTask是一个更容易的选项)。

在这篇文章中有很多东西我还没有说过,例如:什么是UI线程,或者为什么它更容易。你必须知道每一种方法的背后,并使用它,你会完全理解为什么。

@:当您阅读Android文档时,您将看到:

处理程序允许您发送和处理与线程的MessageQueue相关联的消息和可运行对象

一开始他们可能看上去很奇怪。只需了解每个线程都有每个消息队列(如待办事项列表),该线程将接收每条消息并执行,直到消息队列为空(就像完成工作和睡觉一样)。所以,当Handler通信时,它只向调用方线程提供一条消息,然后等待处理。复杂吗?记住Handler可以安全地与调用方线程通信。


查看完整回答
反对 回复 2019-06-23
?
心有法竹

TA贡献1866条经验 获得超5个赞

在深度观察后,它是笔直向前的。

AsyncTask:

这是一种使用线程的简单方法不了解java线程模型AsyncTask分别给出工作线程和主线程的各种回调。

用于小型等待操作,如下所示:

  1. 从Web服务中获取一些数据并显示在布局上。
  2. 数据库查询
  3. 当你意识到运行操作永远不会嵌套。

Handler:

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

Handler允许您从其他后台线程返回UI线程。这在Android中很有用,因为Android不允许其他线程直接与UI线程通信。处理程序可以发送和处理与线程的MessageQueue相关联的消息和可运行对象。每个Handler实例都与单个线程和该线程的消息队列相关联。当创建一个新的Handler时,它被绑定到创建它的线程/消息队列。

这是最适合:

  1. 它允许您执行消息队列。
  2. 消息调度。

Thread:

现在是讨论线程的时候了。

线程是两个线程的父级。AsyncTaskHandler..它们都在内部使用线程,这意味着您还可以创建自己的线程模型。喜欢AsyncTaskHandler,但这需要对Java的多线程实现.


查看完整回答
反对 回复 2019-06-23
  • 3 回答
  • 0 关注
  • 249 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信