如何在后台执行任务而不影响UI线程?

时间:2015-05-07 15:26:43

标签: android multithreading user-interface

我正在制作一些特殊的Android启动器,在结果完成之前,UI中的许多点击应该会执行一些繁重的操作。我不希望UI在执行时挂起。 我不想在每项工作上创建Thread,因为这会占用大量资源。

请注意,我希望Thread按照它们发生的顺序一个接一个地执行。

2 个答案:

答案 0 :(得分:1)

与您的用户界面进行通信的最佳方式是使用GreebrobotSquare中的EventBus。

RxJava非常善于在不同线程之间弹跳,但学习曲线相当高。

Android-Priority-Job-Queue也值得一试。

答案 1 :(得分:1)

在这种情况下适用的一个好策略是创建一个线程,其唯一目的是:"是老板。" 嗯,"那里他/她是,只是坐着'在他/她(!)上,实际上并没有任何事情......",但是,这个线程在任何时候都知道当前的整体工作流程看起来像。每一个其他线程都要求老板下一步做什么,"以及其他每一个主题"向老板报告刚刚完成的结果。"

这种设计的原因是:"工作流程的管理"通常"异步活动。"事实上,它是绝对"充满了竞争条件,"正如我们所见过的任何人类情况一样,没有人负责。"

因此:"将一个主题'负责。'" 一个帖子维护"待办事项列表。"任何从属线程都可以抓住"待办事项"从这个线程负责维护的队列开始,并且在完成该活动后,必须向一个boss-thread提交状态报告。"因此,"那个老板线程,"将串行响应到各种请求流,可以有效地指导其他人的活动。

"那一个线程"是唯一知道"此应用已被添加到侧边栏的权威机构。" (它是通过序列化队列中的消息通知的,读取。)基于此知识,它现在创建一个或多个"待办事项,"正如工作流程定义所规定的那样。很快,一些下属将接受那个待办事项,并且"与它一起运行,"不知道发布的为什么。 (它没有必要知道原因。")它将在适当的时候完成工作,将完成报告发布给"老板,"并等待进一步的指示。)

这是一项适合人类活动的策略。因此,它对计算机同样有效。