请教个安卓多线程改变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 && 还是在不停输出,他为什么没变动? 这样搞得录音一直停止不了..
回答:
private boolean volatile isRecording = false;
以上是 请教个安卓多线程改变while 循环 值问题 的全部内容, 来源链接: utcz.com/p/944127.html