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



我读到了关于循环器和执行器线程池的文章,它们似乎在做完全相同的事情。。。还是我错过了什么?

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

Executor封装了管理任务并将任务分配给不同的线程。如果你有一个固定的线程池大小为1,那么我想它在设计上会类似于Looper,因为它只会为那一个线程排队。如果您有一个大小>1的线程池,那么它将管理将任务分配给下一个可用于执行工作的线程,或者换句话说,它将在所有线程之间分配任务。

edit:推荐阅读:http://developer.android.com/reference/java/util/concurrent/package-summary.html

执行器更灵活。对于Android,我唯一一次真正使用Looper是在尝试制作一个处理程序来从后台线程(甚至可以在ExecutorService中)与主线程通信时。例如:

Handler mainThreadHandler = new Handler(Looper.getMainLooper());
mainThreadHandler.post(new Runnable...); //runs on main thread

可能需要注意的是,AndroidX定义了HandlerExecutor。GMS提供相同的舱位。这是一个使用处理程序的执行器,该处理程序可以构建在任何looper上。例如,通过这种方式,我们可以在API级别<28

让我补充一下,android looper可以由本机代码使用。Android Looper系统由Looper类、Handler类、MesseageQueue类组成。一个活套与一根线相连。从Andorid4.0开始,MessageQueue由java代码和c代码实现,这两个代码是连接的。您可以通过本机代码或java代码向同一MessageQueue发送消息。

所以区别在于:

  1. Looper在一个线程中很简单,而ExecutiorThreadPool在一个或多个线程中则很复杂和灵活。

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

此外,Looper和Handler在Android代码中也很常用。一些安卓开发人员对Handler比对ExecutorThreadPool更熟悉。

最新更新