单线程池 - ExecutorService或Handler + HandlerThread

Che*_*eng 1 multithreading android

传统上,当我需要单个线程池时,我会使用

ExecutorService executorService = Executors.newSingleThreadExecutor();
executorService.submit(...
Run Code Online (Sandbox Code Playgroud)

但是,在查看Weather List Widget时,我意识到我们可以使用Handler+ HandlerThread来实现类似的目标

HandlerThread sWorkerThread = new HandlerThread("WeatherWidgetProvider-worker");
sWorkerThread.start();
Handler sWorkerQueue = new Handler(sWorkerThread.getLooper());
sWorkerQueue.post(...
Run Code Online (Sandbox Code Playgroud)

我想知道,我应该考虑什么,以便在他们中间做出正确的选择?

Leo*_*dos 7

HandlerThread比ExecutorService简单.因此它将使用更少的资源并更快地工作.因此,如果您有很多小消息通过Handler处理它们.

但执行者不仅仅是一个阶级.执行者是一个标准.它是一个具有许多功能的框架,每个java程序员都可以理解用执行程序编写的代码.许多库可以与执行程序一起使用.它很灵活,您可以轻松更改执行程序类型或执行程序队列.因此,如果您有一个复杂的处理任务,并且您不知道它是如何使用执行程序完全实现的.