首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Handler vs AsyncTask

Handler vs AsyncTask
EN

Stack Overflow用户
提问于 2010-03-26 21:17:01
回答 8查看 41K关注 0票数 127

我搞不懂什么时候会选择AsyncTask而不是Handler。假设我有一些代码,我想每隔n秒运行一次,这将更新UI。为什么我要选择一个而不是另一个呢?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2010-03-26 22:40:25

AsyncTask是为了在安卓应用程序中实现后台处理而编写的,提供了一种方便、易于使用的方式,而不需要过多地担心底层细节(线程、消息循环等)。它提供了回调方法,可以帮助调度任务,还可以在需要时轻松更新UI。

但是,重要的是要注意,在使用AsyncTask时,开发人员会服从其限制,这是由于类的作者所做的设计决定造成的。例如,我最近发现可以使用AsyncTasks调度的作业数量是有限制的。

Handler是两者中更透明的,可能会给您更多的自由;因此,如果您希望对事物进行更多的控制,那么您应该选择Handler,否则AsynTask将工作得很好。

票数 75
EN

Stack Overflow用户

发布于 2010-03-27 00:03:33

我的经验法则是:

如果您正在执行与UI相关的单独操作,例如,下载数据以显示在列表中,请继续使用AsyncTask.

  • If您正在执行多个重复任务,例如,下载要在下载时显示在ImageViews中的多个图像(如下载缩略图),请使用具有Handler.

的任务队列

票数 63
EN

Stack Overflow用户

发布于 2013-07-13 22:08:45

在可能的情况下,始终尽量避免使用AsyncTask,主要原因如下:

不能保证运行

  • AsyncTask,因为系统设置了ThreadPool的基本大小和最大大小,如果您创建了太多的异步任务,它们最终将被终止。
  • asynctask在UI线程上运行的方法可能会在它所引用的活动不可见或可能处于不同的布局状态(如方向更改后)时执行。

总之,您不应该使用AsyncTask的UIThread链接方法,这是它的主要优势!此外,你应该只在doInBackground上做非关键的工作。请阅读此帖子,了解有关此问题的更多见解:

Is AsyncTask really conceptually flawed or am I just missing something?

总而言之,当上面提到的任何问题可能对你有影响时,尝试使用IntentServices、HandlerThread或ThreadPoolExecutor而不是AsyncTask。当然,这将需要更多的工作,但您的应用程序将更安全。

票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2523459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档