当我第二次从android应用程序开始录制音频时,它会显示一个对话框
第一次运行此代码时,它运行正常,但当我暂停并再次播放它时,主线程停止超过或等于20秒,然后显示ANR对话框,之后它就不再启动。多次查看此代码,但无法调试。我还注释了startRecording()和stopRecording(),但之后它运行正常,即,问题在于启动和停止服务当我第二次从android应用程序开始录制音频时,它会显示一个对话框,android,mediarecorder,android-mediarecorder,Android,Mediarecorder,Android Mediarecorder,第一次运行此代码时,它运行正常,但当我暂停并再次播放它时,主线程停止超过或等于20秒,然后显示ANR对话框,之后它就不再启动。多次查看此代码,但无法调试。我还注释了startRecording()和stopRecording(),但之后它运行正常,即,问题在于启动和停止服务 public class RecordingService extends Service { private String filePath = null; private String dateSuffix = nul
public class RecordingService extends Service {
private String filePath = null;
private String dateSuffix = null;
private MediaRecorder mediaRecorder = null;
private DatabaseHelperClass databaseHelperClass;
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
databaseHelperClass = new DatabaseHelperClass(getApplicationContext());
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
startRecording();
return START_STICKY;
}
@Override
public void onDestroy() {
stopRecording();
super.onDestroy();
}
private void stopRecording() {
try {
if (mediaRecorder != null) {
mediaRecorder.stop();
mediaRecorder.release();
mediaRecorder = null;
}
}
catch (IllegalStateException e){
}
}
private void startRecording() {
if (mediaRecorder != null)
mediaRecorder.release();
pathCreater();
mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mediaRecorder.setAudioChannels(1);
mediaRecorder.setOutputFile(filePath);
try {
mediaRecorder.prepare();
mediaRecorder.start();
} catch (IOException e) {
e.printStackTrace();
}
}
private void pathCreater() {
String fileName;
File file;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMM MM dd, yyyy h:mm a");
long date = System.currentTimeMillis();
dateSuffix = simpleDateFormat.format(date);
do {
fileName = getString(R.string.file_name_suffix) + "_" + dateSuffix + ".mp3";
filePath = Environment.getExternalStorageDirectory().getAbsolutePath();
filePath += "/" + fileName;
file = new File(filePath);
} while (file.exists() && !file.isDirectory());
}
}
用一根线。在UI线程上做的事情太多了。任何需要5秒钟以上才能在UI线程上完成某项操作的应用程序都将成为ANR。当我在AsyncTask中执行stopRecording()时,它再次显示ANR。我所理解的是,当我第一次播放录制并停止再播放录制时,它没有停止上一次录制并等待上一次录制停止。最后,请解决问题。问题出现在pathCreater()方法行号3,4,5中。请使用线程。在UI线程上做的事情太多了。任何需要5秒钟以上才能在UI线程上完成某项操作的应用程序都将成为ANR。当我在AsyncTask中执行stopRecording()时,它再次显示ANR。我所理解的是,当我第一次播放录制并停止再播放录制时,它没有停止上一次录制并等待上一次录制停止,它显示一个R对话框。最后,解决问题。问题在pathCreater()方法第3,4,5行。