1

我对HandlerHandlerThread类的使用感到困惑。我尝试使用它们的原因是我想利用AudioRecord类及其setRecordPositionUpdateListener方法(参考)。方法描述说:

使用此方法在与另一个线程关联的处理程序中接收 AudioRecord 事件,而不是您在其中创建 AudioTrack 实例的线程。

这正是我想要的 -AudioRecord在主线程中设置,但在工作线程中接收数据。我想我需要一个HandlerThread,所以我创建并启动了一个。我还定义了一个实现AudioRecord.OnRecordPositionUpdateListener接口的回调方法。我希望从 worker 调用此回调HandlerThread。我现在不明白的是如何创建Handler传递给setRecordPositionUpdateListener.

4

1 回答 1

3

Handler与某个线程关联,您应该通过Looper在其构造函数中传递对应来创建它。因此,如果您已经有一个HandlerThread,可以通过以下方式完成:

Looper looper = myHandlerThread.getLooper();
Handler handler = new Handler(looper);

就是这样,只需在setRecordPositionUpdateListener方法中使用此处理程序,回调将在工作线程中执行。如果您需要更多关于和的解释Handler,您可以查看这里LooperHandlerThread

于 2015-05-15T12:21:39.433 回答