我正在阅读关于循环程序的内容,以及关于执行程序线程池的内容,它们似乎在做完全相同的事情……还是我缺少了什么?
我不同意这一点,如果您查看该执行程序教程,它将一次触发线程5
抱歉,是我的错
Looper管理线程将运行的任务。它将它们放入队列,然后线程接受下一个任务。 Looper绑定到特定线程。
Executor封装了管理任务和将任务分配给不同的线程。如果您将线程池的大小固定为1,那么我想它的设计与Looper相似,因为它只会使该线程的工作排队。如果您的线程池的大小> 1,则它将设法将任务分配给下一个可用于执行工作的线程,换句话说,它将在所有线程之间分配任务。
编辑:推荐阅读:http://developer.android.com/reference/java/util/concurrent/package-summary.html
执行者更灵活。对于Android,我唯一真正使用Looper的地方是试图使Handler与后台线程(甚至可能在ExecutorService中)与主线程进行通信时。例如:
Handler mainThreadHandler = new Handler(Looper.getMainLooper());
mainThreadHandler.post(new Runnable...); //runs on main thread
刚刚看到了您的网站。 如果您在上面放3个android面试问题,那就太好了
@ user3430459当然,一旦我有时间去做。 :)
@ trevor-e我想您的意思是写" ExecutorThreadPool"而不是" Executor"。 ExecutorThreadPool管理任务并将任务分配给池化线程(如果有的话),就像您解释得差不多。 执行程序是用于执行可运行任务的对象。
让我补充一下,本地代码可以使用android looper。
Android Looper系统由Looper类,Handler类,MesseageQueue类组成。一个弯针被限制到一个线程。
从Andorid 4.0开始,MessageQueue由连接的Java代码和C代码实现。您可以通过本机代码或Java代码将消息发送到同一MessageQueue。
所以区别是:
Looper具有一个线程很简单,但是ExecutorThreadPool具有一个或多个线程非常复杂且灵活。
本地代码可以方便地使用Looper。
此外,Looper和Handler通常在Android代码中使用。一些android开发人员对Handler比ExecutorThreadPool更熟悉。