当我第二次从android应用程序开始录制音频时,它会显示一个对话框

当我第二次从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

第一次运行此代码时,它运行正常,但当我暂停并再次播放它时,主线程停止超过或等于20秒,然后显示ANR对话框,之后它就不再启动。多次查看此代码,但无法调试。我还注释了startRecording()和stopRecording(),但之后它运行正常,即,问题在于启动和停止服务

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行。