Android: Какой поток вызывает .onSensorChanged?

Я прочитал несколько дискуссий о том, какой поток вызывает различные методы обратного вызова, например те, которые связаны с датчиками. Большинство утверждают, что поток пользовательского интерфейса вызывает обратные вызовы, даже если задействован отдельный рабочий поток. УВЕРЕНЫ?

Рассмотрим этот сценарий: отдельный класс реализует Runnable и SensorListener. Поток пользовательского интерфейса (во время onCreate) запускает runnable, а затем возвращается к другому бизнесу. Теперь независимый рабочий поток в своем собственном классе регистрирует SensorListener.

Обратите внимание, что нить пользовательского интерфейса никогда не взаимодействует с SensorManager или SensorListener. Единственный поток, который когда-либо затрагивает все, что связано с Sensor, и единственные методы класса и члена, о которых он когда-либо знал, – это рабочий поток и его класс.

Мне трудно представить, что в этой ситуации поток пользовательского интерфейса будет вызывать обратный вызов. Тем не менее, онлайн-дискуссии довольно «уверены». Кто-нибудь знает наверняка?

Благодаря!

УВЕРЕНЫ?

Да, хотя это зависит от того, как вы регистрируете слушателя, а поведение не особенно хорошо документировано.

Существует два метода registerListener() которые принимают SensorEventListener . Один берет Handler , другой – нет. Последний будет использовать Handler , связанный с основным потоком приложения. Если вы хотите, чтобы события были доставлены в фоновый поток, используйте HandlerThread (который действительно должен быть вызван LooperThread , но они не спрашивали меня …), создайте в нем Handler и используйте этот Handler с помощью registerListener() ,