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ď č. 1No ... 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();
}
}