我正在制作一些特殊的Android启动器,在结果完成之前,UI中的许多点击应该会执行一些繁重的操作。我不希望UI在执行时挂起。
我不想在每项工作上创建Thread
,因为这会占用大量资源。
请注意,我希望Thread
按照它们发生的顺序一个接一个地执行。
答案 0 :(得分:1)
与您的用户界面进行通信的最佳方式是使用Greebrobot或Square中的EventBus。
RxJava非常善于在不同线程之间弹跳,但学习曲线相当高。
答案 1 :(得分:1)
在这种情况下适用的一个好策略是创建一个线程,其唯一目的是:"是老板。" 嗯,"那里他/她是,只是坐着'在他/她(!)上,实际上并没有做任何事情......",但是,这个线程在任何时候都知道当前的整体工作流程看起来像。每一个其他线程都要求老板下一步做什么,"以及其他每一个主题"向老板报告刚刚完成的结果。"
这种设计的原因是:"工作流程的管理"通常不"异步活动。"事实上,它是绝对"充满了竞争条件,"正如我们所见过的任何人类情况一样,没有人负责。"
因此:"将一个主题'负责。'" 一个帖子维护"待办事项列表。"任何从属线程都可以抓住"待办事项"从这个线程负责维护的队列开始,并且在完成该活动后,必须向一个boss-thread提交状态报告。"因此,"那个老板线程,"将串行响应到各种请求流,可以有效地指导其他人的活动。
"那一个线程"是唯一知道"此应用已被添加到侧边栏的权威机构。" (它是通过序列化队列中的消息通知的,仅读取。)基于此知识,它现在创建一个或多个"待办事项,"正如工作流程定义所规定的那样。很快,一些下属将接受那个待办事项,并且"与它一起运行,"不知道发布的为什么。 (它没有必要知道原因。")它将在适当的时候完成工作,将完成报告发布给"老板,"并等待进一步的指示。)
这是一项适合人类活动的策略。因此,它对计算机同样有效。