HandlerThread和Handler:如何使用AudioRecord.setRecordPositionUpdateListener?
HandlerThread and Handler: how to use AudioRecord.setRecordPositionUpdateListener?
我对 Handler
和 HandlerThread
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
方法中使用此处理程序,回调将在工作线程中执行。如果你需要更多关于Handler
、Looper
和HandlerThread
的解释,你可以看看here.
我对 Handler
和 HandlerThread
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
方法中使用此处理程序,回调将在工作线程中执行。如果你需要更多关于Handler
、Looper
和HandlerThread
的解释,你可以看看here.