android内存冻结,java - Android Studio:While循环冻结应用程序 - 堆栈内存溢出

我的Android Studio应用程序代码由一个开始/停止按钮组成,该按钮用于使用AudioRecord录制音频,然后将该音频数据输出到文本视图,一次完成效果很好。 如果我反复单击该按钮,它也可以工作。 但是,如果我将其置于while循环中,则该应用程序将冻结(仅该应用程序将冻结;在仿真器和真正的智能手机上结果相同)。 我相信我发现它与AudioRecord没有任何关系,也没有将循环放入按钮侦听器中,或者将其放入从侦听器调用的方法中,或者与被调用的方法相反,开始和停止了录音。侦听器,甚至lambda表达式或其他任何内容。 没有while循环,它会正常工作; 它冻结了。 但是我需要连续获取音频数据。 非常感谢您的帮助。 我的缩写代码:

public class MainActivity extends AppCompatActivity {

public static final int SAMPLE_RATE = 16000;

private AudioRecord recorder;

private Button btn;

private TextView txtView;

private boolean isRecording = false;

private short[] buffer;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

btn = (Button) findViewById(R.id.btn);

txtView = (TextView) findViewById(R.id.TextView);

initializeRecorder();

btn.setOnClickListener(e -> {

if (!isRecording) {

btn.setText("Stop");

isRecording = true;

recorder.startRecording();

record();

}

else {

btn.setText("Start");

isRecording = false;

recorder.stop();

}

});

}

private void initializeRecorder() {

int bufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE,

AudioFormat.CHANNEL_IN_MONO,

AudioFormat.ENCODING_PCM_16BIT);

buffer = new short[bufferSize];

recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,

SAMPLE_RATE,

AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT,

bufferSize);

}

private void record() {

int readSize;

while (isRecording) { // This is the loop causing trouble

readSize = recorder.read(buffer, 0, buffer.length);

// Perform calculations on this data and output to txtView,

// like:

txtView.setText(Integer.toString(readSize));

// BTW, I know I'm not saving this audio to a file; that's on

// purpose. I just need this data.

}

}

@Override

public void onDestroy() {

recorder.release();

super.onDestroy();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值