在android中的线程之间发送实时缓冲区数据

时间:2013-05-03 17:55:40

标签: android multithreading

假设我有两个片段:FragA和FragB。

FragB位于FragA内部。在FragA中,有一个rec按钮,当按下它时将启动一个新线程(ThreadA),它将开始使用AudioRecord录制音频并将音频数据保存到缓冲区。在FragB中,还有另一个线程(ThreadB)需要实时消耗来自ThreadA的缓冲区数据。

如何实时从ThreadA向ThreadB发送缓冲区数据?

3 个答案:

答案 0 :(得分:1)

我不知道你在哪里有线程B.但是如果你想要两个线程共享相同的数据缓冲区那么你可以为缓冲区创建一个类变量,并在同一个类中创建两个线程。这样他们可以使用相同的缓冲区从不同的线程读写。

答案 1 :(得分:1)

您可以在其中创建一个包含数据缓冲区的类,该类在应用程序启动时进行实例化。这可以传递给Frag A(和线程A)和Frag B(以及线程B),一个可以填充另一个可以空...

答案 2 :(得分:0)

你可以使用一个管道(在C中它意味着看管道(),mkfifo()等。我认为Java有类似的东西)。写入线程A中的管道,从线程B中的管道读取,并依赖管道的内部缓冲区,使两个线程具有一定程度的异步性。

这是懒惰的做法,也不是非常有效(数据被复制两次)。但它使用起来非常简单。

或者你可以拥有一堆缓冲区,每个缓冲区都受一对信号量的保护(你可以将它们称为'填充'和'清空')。线程A采用“清空”信号量,填充缓冲区并发布“填充”信号量。同时线程B被阻止尝试获取“填充”信号量,当解除阻塞时,它可以处理数据然后发布“清空”信号量。然后移动到下一个缓冲区。这样更有效,因为不会不必要地复制数据。可能有一个Java类为您预先打包所有这些,可能在其名称中包含“queue”一词。