java在使用ExecutorService时获取对处理程序的引用
我正在使用ScheduledExecutorService定期运行可运行的。在Runnable中,我注册了一个SensorEventListener。我注意到SensorEventListener回调在主线程上被调用,而不是在ScheduledExecutorService的线程池中被调用。我想处理来自主线程的传感器事件的回调。在调用SensorManager类的registerListener()时,我似乎能够传递一个Handler对象,回调将在处理程序所在的线程上运行
有没有办法获取对ScheduledExecutorService处理程序的引用
# 1 楼答案
您可以在后台线程中尝试
Handler handler = new Handler(Looper.myLooper());
(您的ScheduledExecutorService
正在运行的地方),然后将实例传递给SensorManager
# 2 楼答案
这很难。常规的
ExecutorService
没有Looper
,这样的线程中不能有Handler
A
Looper
是一个无限循环,用于对事件进行排队和执行。所以如果你安排你的遗嘱执行人被阻止。您可能可以基于活套的事件处理实现自己的执行器,但我猜这不是您想要的要在后台使用传感器,您需要创建一个
HandlerThread
。这是一个运行循环器的后台线程,因此它可以有一个Handler
小例子
# 3 楼答案
Handler总是在它创建的线程中“处理”事情,所以只需在
ExecutorService
中创建一个新的。只需使用default Handler constructor