2012-08-16 97 views
1

在兒童活動中,我使用MediaRecorder錄製了一些音頻,並有兩個按鈕:第一個將開始錄製,第二個將回到其父活動。但是,每次我點擊返回按鈕時,回到主要活動的視圖需要很長時間。我的代碼裏面返回按鈕的回調:返回需要很長時間

public void onClick(View arg0) {   
     if (arg0.getId() == R.id.startRecord) 
     { 
      StartRecording(); 
     } 

     else if (arg0.getId() == R.id.goBack) 
     { 
     if(mediaRecorder!=null) 
      { 
      mediaRecorder.stop(); 
      mediaRecorder.release(); 
      mediaRecorder = null; 
      } 
     this.finish(); 

     } 
    } 

父活動的onCreate()方法只啓動幾個按鈕,並設置監聽方法給他們。我真的不知道爲什麼回去的行動需要很長時間。值得一提的一個現象是,如果我不先記錄,而是先按回去按鈕,那麼對於父項活動來說,它非常快速。很長的響應時間只發生在我錄製一些音頻之後。我確實上傳了錄製的音頻,但是我上傳了AsyncTask任務,上傳工作完成後我可以收到反饋。在我看到反饋意見後,甚至等待一段時間後,返回按鈕仍然需要很長時間才能將我帶回主要活動。任何人都有這方面的建議?謝謝!

+0

檢查logcat的,看看有什麼日誌消息被寫入日誌。我猜測mediaRecorder的stop()和release()是阻塞的。 – 2012-08-16 18:29:13

+0

我認爲將mediaRecorder.release移動到Ondestroy/Onresume可以讓它變得更快。試一試 – nandeesh 2012-08-16 18:29:58

+0

聽起來像在'onPostExecute()'中,您應該將用戶重定向回主活動,然後提供成功上傳的警報。通過這種方式,您可以將後退按鈕排除在外,除非用戶可以選擇保持放置狀態。 – jnthnjns 2012-08-16 18:42:01

回答

1

你可以重寫後退按鈕,儘管從我看到的情況來看似乎很多開發人員並不喜歡這個想法。

@Override 
public void onBackPressed() { 
    mediaRecorder.stop(); 
    mediaRecorder.release(); 
    mediaRecorder.reset(); 
    mediaRecorder = null; 
} 

看看是否適合你。


更重要的是,這樣的事情可能會更加有用,這樣你可以很容易地調用stop()方法貫穿輕鬆:

public void onClick(View arg0) {   
    if (arg0.getId() == R.id.startRecord) { 
     StartRecording(); 
    } else if (arg0.getId() == R.id.goBack) { 
     if(mediaRecorder!=null) { 
     stopRecording(); 
    } 
    this.finish(); 
} 


public void stopRecording() throws IOException { 
    mediaRecorder.stop(); 
    mediaRecorder.release(); 
    mediaRecorder.reset(); 
    mediaRecorder = null; 
} 

@Override 
public void onBackPressed() { 
    stopRecording(); 
} 
相關問題