2013-01-24 1 views
2

는이 같은 응용 프로그램 작성 :앱 MediaRecorder는 프로그램 ANR

public static void startRecording() { 

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

가 ΪMicphone 음악 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; 
} 
} 

최종 녹화

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

} 

I 반복 ated 빠른 통화 녹음 반복적으로 녹음을 호출하고 녹음 프로세스를 중지하면 ANR 현상이 나타납니다. 누가 문제인지 압니까?
미리 감사드립니다.

+1

마인드 logcat를 추가하십시오. 그러면 ANR 원인을 쉽게 찾을 수 있습니다. 그건 그렇고. 당신은 UI 스레드에서 이것을하지 않습니다. 그렇죠? – Kristopher

답변

3

글쎄 ...이 게시물은 조금 오래되었지만, 매우 비슷한 경우와 관련하여 게시 된 문제의 설명은 here입니다.

녹음을 중지하면 비디오가 폰 메모리 (내부 또는 SD 카드)에 저장됩니다. 이것은 과도한 I/O 조작이므로 응용 프로그램이 잠시 동안 응답하지 않아 ANR이 발생할 수 있습니다.

잘 모르겠지만 다른 스레드에 멈추려 고 시도 했습니까? 이것은 당신을 위해 일할 수 있습니다.

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

Thanx alot 형제 님, 2 일 동안 내 머리를 긁적입니다 !!!! – GOLDEE