【问题标题】:AudioRecord Out of Memory ExceptionAudioRecord 内存不足异常
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2010-10-05
      • 1970-01-01
      • 2010-12-21
      相关资源
      最近更新 更多