android looper和executor线程池之间的区别

时间:2014-04-16 16:06:58

标签: java android

我正在阅读about loopers,也在Executor Thread Pools,他们似乎在做同样的事情......或者我错过了什么?

3 个答案:

答案 0 :(得分:16)

Looper管理线程将运行的任务。它将它们放入队列中,然后线程接受下一个任务。 Looper绑定到特定的线程。

Executor封装管理和分配任务到不同的线程。如果你有一个固定的线程池大小为1,那么我认为它在设计上与一个Looper类似,因为它只是排队那个Thread的工作。如果你有一个大小>的线程池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

答案 1 :(得分:1)

请务必注意,AndroidX定义了HandlerExecutor。 GMS提供了相同的类。这是使用可以在任何循环程序上构建的处理程序的执行程序。例如,通过这种方式,我们可以get an Executor for Main thread on API level < 28

答案 2 :(得分:0)

让我补充一下,本地代码可以使用android looper。 Android Looper系统由Looper类,Handler类,MesseageQueue类组成。一个弯针被限制到一个线程。 从Andorid 4.0开始,MessageQueue由连接的Java代码和C代码实现。您可以通过本机代码或Java代码将消息发送到同一MessageQueue。

所以区别是:

  1. Looper具有一个线程很简单,但是ExecutorThreadPool具有一个或多个线程非常复杂且灵活。

  2. Looper可以方便地由本机代码使用。

此外,Looper和Handler通常在Android代码中使用。一些android开发人员对Handler的兴趣远胜于ExecutorThreadPool。

相关问题