/ / App MediaRecorder program ANR - Android, Android-Mediarecorder

Program App MediaRecorder ANR - Android, Android-Mediarecorder

Tworzę aplikację w ten sposób:

Kod do rozpoczęcia nagrywania

public static void startRecording() {

if (recordTime == 0) {
if (null == mr) {
mr = new MediaRecorder();
}
path = new File(Environment.getExternalStorageDirectory(),
"myRecording.3gp");
mr.reset();

Uzyskaj wolumin muzyczny ΪMicphone

mr.setAudioSource(MediaRecorder.AudioSource.MIC);
mr.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mr.setOutputFile(path.getAbsolutePath());
mr.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

try {
mr.prepare();
} catch (IOException e) {
}
mr.start();
Record.recordTime = 1;
}
}

Zakończ nagrywanie

public static void stopRecording() {
if (mr != null) {
// mr.reset();
mr.stop();
mr.release();
mr = null;
Record.recordTime = 0;
}

}

Powtórzyłem szybkie nagrywanie rozmowy Wzywam nagrywanie szybko kilka razy i zatrzymuję proces nagrywania, pojawi się zjawisko ANR. Kto wie, na czym polega problem?
Z góry dziękuję!

Odpowiedzi:

3 dla odpowiedzi № 1

Cóż ... ten post jest trochę stary, ale ponieważ mam bardzo podobny przypadek, opublikowałem wyjaśnienie problemu tutaj dla mnie to ma sens.

Po zatrzymaniu nagrywania wideo zostanie zapisane w pamięci telefonu (wewnętrznej lub na karcie SD). Ponieważ jest to ciężka operacja we / wy, aplikacja może przez pewien czas nie odpowiadać, powodując ANR.

Nie wiem, ale czy próbowałeś położyć kres innym wątkom? To może ci pomóc.

    public static void stopRecording() {
if (mr != null) {
new Thread(new Runnable() {
@Override
public void run() {
mr.stop();
mr.release();
mr = null;
Record.recordTime = 0;
}
}).start();
}
}