2012-08-16 5 views
1

Dans une activité enfant, j'écris de l'audio en utilisant MediaRecorder et j'ai deux boutons: Le premier commencera à enregistrer et le second retournera à son activité parente. Cependant, chaque fois que j'appuie sur le bouton de retour, il faut beaucoup de temps pour revenir à la vue de l'activité principale. Mon code retour aller à l'intérieur de rappel de bouton est:Retour prend beaucoup de temps

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

     } 
    } 

méthode onCreate() L'activité de parent n'initier plusieurs boutons et définir des méthodes d'écoute pour eux. Je ne peux vraiment pas comprendre pourquoi l'action en retour prendra du temps. Un phénomène digne de mention est que si je n'enregistre pas d'abord, mais que j'appuie sur le bouton de retour en premier, cela revient très vite à l'activité parentale. Le temps de réponse long ne se produit qu'après avoir enregistré de l'audio. Je télécharge l'audio enregistré mais j'ai mis le téléchargement dans une tâche AsyncTask et je peux obtenir des commentaires lorsque le téléchargement est terminé. Après avoir vu les commentaires, et même attendre un certain temps, le bouton de retour prend encore beaucoup de temps pour me ramener à l'activité principale. Quelqu'un a des conseils à ce sujet? Merci!

+0

chèque logcat pour voir quels sont les messages de journalisation sont écrits dans les journaux . Im devinant les stop() et release() du mediaRecorder bloque. –

+0

Je pense que déplacer le mediaRecorder.release à Ondestroy/Onresume pourrait le rendre rapide. A essayer – nandeesh

+0

Il semble que dans le 'onPostExecute()' vous devriez rediriger l'utilisateur vers l'activité principale, puis fournir l'alerte d'un téléchargement réussi. De cette façon, vous pouvez retirer le bouton de retour de l'équation, sauf si l'utilisateur a la possibilité de rester sur place. – jnthnjns

Répondre

1

Vous pouvez remplacer le bouton de retour, mais d'après ce que j'ai vu il semble que beaucoup de développeurs ne sont pas favorables à l'idée.

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

Voir si cela fonctionne pour vous.


Mieux encore, quelque chose comme cela pourrait être plus utile, de cette façon vous pouvez facilement appeler la méthode stop() tout au long de la facilité:

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