HandlerThread和Handler:如何使用AudioRecord.setRecordPositionUpdateListener?

HandlerThread and Handler: how to use AudioRecord.setRecordPositionUpdateListener?

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

Use this method to receive AudioRecord events in the Handler associated with another thread than the one in which you created the AudioTrack instance.

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

要将Handler与某个线程相关联,您应该通过在其constructor中传递相应的Looper来创建它。所以,如果你已经有一个 HandlerThread 可以通过以下方式完成:

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

仅此而已,只需在 setRecordPositionUpdateListener 方法中使用此处理程序,回调将在工作线程中执行。如果你需要更多关于HandlerLooperHandlerThread的解释,你可以看看here.