【发布时间】:2015-03-13 18:50:46
【问题描述】:
我创建了一个持续读取麦克风输入的对象,但我遇到了一些问题。我需要能够暂停和启动它,所以我已经实现了这些方法,但问题是,在旧手机(Galaxy Y)上,我第一次启动它时效果很好,但在我暂停它之后再次启动它会因为 OutOfMemoryException 而迅速崩溃。
@Override
public void run() {
while (mIsRunning) {
synchronized (mThread) {
while (mIsPaused) {
try {
mThread.wait();
} catch (InterruptedException e) {
}
}
}
double sum = 0;
int readSize = mRecorder.read(mBuffer, 0, mBuffer.length);
if (readSize > 0) {
short[] samples = new short[readSize];
for (int i = 0; i < readSize; i++) {
sum += mBuffer[i] * mBuffer[i];
samples[i] = mBuffer[i];
}
final int amplitude = (int) Math.sqrt((sum / readSize));
Message message = new Message();
message.arg1 = amplitude;
message.arg2 = readSize;
message.obj = samples;
message.what = 0;
if (mHandler != null)
mHandler.sendMessage(message);
}
}
}
public void start() {
if (!mIsRunning) {
mIsRunning = true;
mThread.start();
} else synchronized (mThread) {
mIsPaused = false;
mThread.notifyAll();
}
mRecorder.startRecording();
}
public void pause() {
synchronized (mThread) {
mIsPaused = true;
}
mRecorder.stop();
}
所以,第一次一切正常,但是在我调用 AudioRecord 上的 stop() 并再次开始读取输入之后,我很快就耗尽了内存。有想法该怎么解决这个吗?我在想只是不停止记录,只是不通过处理程序发送数据,但我不知道。谢谢。
【问题讨论】:
标签: android exception memory out audiorecord