/ / Aplikácia MediaRecorder program ANR - android, android-mediarecorder

Aplikácia MediaRecorder program ANR - android, android-mediarecorder

Aplikáciu vytváram takto:

Kód pre začatie nahrávania

public static void startRecording() {

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

Získajte hudbu ΪMicphone music volime

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;
}
}

Ukončiť nahrávanie

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

}

Opakoval som rýchle nahrávanie hovorov Opakovane volám nahrávanie rýchlo a zastavím proces nahrávania, objaví sa jav ANR. Kto vie, v čom je problém?
Vopred ďakujem!

odpovede:

3 pre odpoveď č. 1

No ... tento príspevok je trochu starý, ale keďže som s veľmi podobným prípadom, bolo zverejnené vysvetlenie problému tu dáva mi zmysel.

Keď zastavíte nahrávanie, video sa uloží do pamäte telefónu (internej alebo na SD kartu). Pretože sa jedná o náročnú I / O operáciu, aplikácia nemusí chvíľu reagovať, čo spôsobí chybu ANR.

Neviem, ale pokúsili ste sa dať doraz do iného vlákna? Môže to pre vás fungovať.

    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();
}
}