我读过一些关于哪个线程调用各种回调方法的讨论,例如与传感器关联的回调方法。大多数声称 UI 线程调用回调 - 即使涉及单独的工作线程。我们确定吗?
考虑这种情况:一个单独的类实现 Runnable 和 SensorListener。 UI 线程(在 onCreate 期间)启动可运行对象,然后返回到它的其他业务。现在独立的工作线程在它自己的类中,然后注册 SensorListener。
请注意,UI 线程从不与 SensorManager 或 SensorListener 进行任何交互。唯一接触过与 Sensor 有关的任何事情的线程,以及它所知道的唯一类和成员方法,是工作线程及其类。
我很难想象 UI 线程会在这种情况下调用回调。然而网上的讨论却相当“自信”。有人知道吗?
谢谢!
最佳答案
Are we CERTAIN about that?
是的,尽管这取决于您注册监听器的方式,并且该行为没有特别详细的记录。
有两个 registerListener()
方法接受一个 SensorEventListener
。一个接受 Handler
,另一个不接受。后者将使用与主应用程序线程关联的 Handler
。如果您希望将事件传递到后台线程,请使用 HandlerThread
(实际上应该称为 LooperThread
,但他们没有问我...),在其中创建一个 Handler
,并将该 Handler
与 registerListener()
一起使用。
关于Android:哪个线程调用.onSensorChanged?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17681870/