我对Handler
和HandlerThread
类的使用感到困惑。我尝试使用它们的原因是我想使用AudioRecord
类及其setRecordPositionUpdateListener
方法(reference)。方法描述说:
使用此方法接收与另一个线程相关联的Handler中的AudioRecord事件,而不是您创建AudioTrack实例的线程。
这正是我想要的 - 在主线程中设置AudioRecord
,但在工作线程中接收数据。我想我需要一个HandlerThread
所以我创建并开始了一个。我还定义了一个实现AudioRecord.OnRecordPositionUpdateListener
接口的回调方法。我希望从worker HandlerThread
调用此回调。我现在不明白的是如何创建传递给Handler
的{{1}}。
答案 0 :(得分:3)
要将Handler
与某个主题相关联,您应该通过在constructor中传递相应的Looper
来创建它。因此,如果您已经有HandlerThread
,则可以通过以下方式完成:
Looper looper = myHandlerThread.getLooper();
Handler handler = new Handler(looper);
就是这样,只需在setRecordPositionUpdateListener
方法中使用此处理程序,并在工作线程中执行回调。如果您需要对Handler
,Looper
和HandlerThread
进行更多说明,可以查看here。