我有一个按钮,可以播放音频文件,切换 bool(boolean) 值和为按钮设置新文本(从播放到停止,反之亦然)。
不幸的是,当我按下“播放”按钮时,使按钮说“停止”会有很大的滞后,而当我再次按下按钮以停止音频播放时,也存在滞后。
我将不胜感激,谢谢!
public void Playbutton(View view) {
if (playbuttonstatus) {
playBtn.setText(getString(R.string.stop));
playbuttonstatus = false;
File file = new File(Environment.getExternalStorageDirectory(), "test.pcm");
int shortSizeInBytes = Short.SIZE / Byte.SIZE;
int bufferSizeInBytes = (int) (file.length() / shortSizeInBytes);
short[] audioData = new short[bufferSizeInBytes];
try {
InputStream inputStream = new FileInputStream(file);
BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);
DataInputStream dataInputStream = new DataInputStream(bufferedInputStream);
int i = 0;
while (dataInputStream.available() > 0) {
audioData[i] = dataInputStream.readShort();
i++;
}
dataInputStream.close();
audioTrack = new AudioTrack(
AudioManager.STREAM_MUSIC,
11025,
AudioFormat.CHANNEL_OUT_MONO,
AudioFormat.ENCODING_PCM_16BIT,
bufferSizeInBytes,
AudioTrack.MODE_STREAM);
audioTrack.play();
audioTrack.write(audioData, 0, bufferSizeInBytes);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
} else {
playBtn.setText(getString(R.string.play));
playbuttonstatus = true;
audioTrack.pause();
audioTrack.flush();
}
}
最佳答案
您应该使用AsyncTask
进行声音播放。
在onPreExecute
中,您将设置按钮文本并设置 bool(boolean) 标志(UI主线程)。
在doInBackground
中,您将检索声音文件并播放它(工作线程)。
如果用户按下停止按钮,则取消当前的asyncTask并更新按钮文本。
关于android - Android应用程序上的按钮滞后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40704944/