请教个安卓多线程改变while 循环 值问题

这是前端页面

        <Button android:id="@+id/done"
            android:onClick="starVoce"
            android:layout_marginRight="10dp"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_gravity="center_vertical"
            android:text="开始录音" />

        <Button
            android:onClick="endVoce"
            android:id="@+id/revert"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:layout_gravity="center_vertical"
            android:text="结束录音" />

开始录音是没有问题的
我通过一个VoiceContentActivity类

    public void endVoce(View view) {
        audioRecord = new AudioRecordActivity();

        audioRecord.stopRecord();

        Toast.makeText(this, "停止录制", Toast.LENGTH_SHORT).show();
    }

我想通过stopRecord 方法改变 isRecording 的值
AudioRecordActivity 类

public class AudioRecordActivity implements Runnable{

private  boolean isRecording = false; //true表示正在录音

    //停止录音
    public void stopRecord() {
 
      isRecording = false;
        Log.e("", "startRecord:停止录音"+isRecording );

    }
    public void run() {

        try {
            //获取到文件的数据流
            mDataOutputStream = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(mRecordingFile)));
            byte[] buffer = new byte[mBufferSizeInBytes];

            //判断AudioRecord未初始化,停止录音的时候释放了,状态就为STATE_UNINITIALIZED
            if(mAudioRecord.getState() == mAudioRecord.STATE_UNINITIALIZED){
                initDatas();
            }

            mAudioRecord.startRecording();//开始录音
            //getRecordingState获取当前AudioReroding是否正在采集数据的状态
            while (isRecording && mAudioRecord.getRecordingState() == AudioRecord.RECORDSTATE_RECORDING) {

                int bufferReadResult = mAudioRecord.read(buffer,0,mBufferSizeInBytes);
                for (int i = 0; i < bufferReadResult; i++)
                {

                    //Log.e("", buffer[i]+"--"+isRecording );
                  //  mDataOutputStream.write(buffer[i]);
                }
                Log.e("", ""+isRecording );
                //stopRecord();

            }

            mDataOutputStream.close();
        } catch (Throwable t) {
            Log.e("lu", "Recording Failed");
            stopRecord();
        }
    }
}

为什么 stopRecord() 里面的值isRecording 改变了, run() 里面的循环while (isRecording && 还是在不停输出,他为什么没变动? 这样搞得录音一直停止不了..

阅读 1.5k
1 个回答

private boolean volatile isRecording = false;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题