2013-01-24 85 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; 
} 

} 

我重複快速通話錄音 我反覆快速錄音並停止錄音過程,會出現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很多兄弟,是從2天抓我的頭!!!! – GOLDEE

相關問題