AudioRecord 内存不足异常

AudioRecord Out of Memory Exception

我创建了一个持续读取麦克风输入的对象,但我在使用它时遇到了一些问题。我需要能够暂停和启动它,所以我已经实现了这些方法,但问题是,在较旧的 phone (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() 并再次开始读取输入后,我很快 运行 内存不足。有想法该怎么解决这个吗?我在想只是不停止记录,只是不通过处理程序发送数据,但我不知道。谢谢

解决方案是在每次暂停时销毁(并释放)AudioRecord 对象,并在每次开始时重新创建它。