¿Cómo borrar o liberar recursos de audio en Android?

Como se prioriza más el consumo de memoria en Android, si la Aplicación utiliza la API de Mediaplayer, se asignan la mayoría de los recursos de memoria. El desarrollador debe tener cuidado cuando ya no se necesita la instancia de Mediaplayer o después de completar la reproducción del archivo de recursos multimedia. Entonces, en este artículo, se ha discutido cómo se pueden liberar los recursos del reproductor multimedia en varios escenarios paso a paso para que el consumo de memoria de la aplicación sea estable.

Pasos para liberar los recursos de audio

Paso 1: Cree un proyecto de Android Studio de actividad vacía.

Paso 2: Preparación del archivo de audio de muestra para reproducir.

  • En este caso, se toma un archivo MP3 de muestra en la carpeta sin formato.
  • Para crear la carpeta » sin procesar « , haga clic con el botón derecho en r es > Nuevo > Directorio de recursos de Android y seleccione el tipo de recurso como sin procesar.
  • Y después de crear la carpeta, agregue un archivo de audio de muestra para reproducir.
  • Consulte el siguiente video si no puede obtener los pasos anteriores.

Paso 3: Trabajando con activity_main.xml

  • En el archivo activity_main.xml , se implementa un botón PLAY simple para comenzar a reproducir el archivo de audio cuando se hace clic.
  • Invoque el siguiente código.

XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    tools:ignore="HardcodedText">
  
    <!--simple button to play the audio file-->
    <!--give appropriate id to handle it in the java file-->
    <Button
        android:id="@+id/play_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:backgroundTint="@color/colorPrimary"
        android:text="PLAY"
        android:textColor="@android:color/white"
        android:textSize="18sp" />
  
</RelativeLayout>

Interfaz de usuario de salida:

 Clear or Release Audio resources in Android

Paso 4: trabajar con el archivo MainActivity.java

  • Inicie la instancia de MediaPlayer con el recurso sin formato para reproducir el archivo de audio.
  • Invoque el siguiente código para manejar el botón de reproducción para comenzar a reproducir el archivo de audio.
  • Los comentarios se agregan dentro del código para una mejor comprensión.

Java

import androidx.appcompat.app.AppCompatActivity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
  
public class MainActivity extends AppCompatActivity {
  
    // Mediaplayer instance to initiate the audio file to play
    MediaPlayer mediaPlayer;
  
    // Button instance to handle the PLAY button
    Button bPlay;
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        // register the PLAY button with appropriate id.
        bPlay = findViewById(R.id.play_button);
  
        // prepare the audio file for mediaPlayer instance to play it.
        mediaPlayer = MediaPlayer.create(this, R.raw.song);
  
        // handle the play button
        bPlay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mediaPlayer.start();
            }
        });
    }
}

Salida: ejecutar en el emulador

Varios escenarios donde los recursos de audio se pueden liberar o borrar

Nota: En este caso, hay dos escenarios que se han mostrado con fines de demostración.
Puede haber más otros escenarios en los que se pueden liberar los recursos de audio.

Escenario 1: Después de reproducir completamente el archivo de audio

  • Este es uno de los escenarios donde se pueden liberar los recursos de Audio.
  • En este caso, los recursos se liberan después de reproducir completamente el archivo de audio.
  • Invoque el siguiente código para implementar el detector de finalización para la instancia de mediaPlayer y liberar los recursos de audio.

Java

import androidx.appcompat.app.AppCompatActivity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
  
public class MainActivity extends AppCompatActivity {
  
    // Mediaplayer instance to initiate 
      // the audio file to play
    MediaPlayer mediaPlayer;
  
    // Button instance to handle the PLAY button
    Button bPlay;
  
    // Implement the on completion listener callback to do the 
      // actions on the media player instance
    // when the audio file gets completely played
    MediaPlayer.OnCompletionListener onCompletionListener = new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            releaseMediaPlayerResources();
        }
    };
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        // register the PLAY button with appropriate id.
        bPlay = findViewById(R.id.play_button);
  
        // prepare the audio file for 
          // mediaPlayer instance to play it.
        mediaPlayer = MediaPlayer.create(this, R.raw.song);
  
        // handle the play button
        bPlay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mediaPlayer.start();
  
                mediaPlayer.setOnCompletionListener(onCompletionListener);
            }
        });
    }
  
    // dedicated function is made to check the 
      // mediaPlayer instance is null or not
    // based on that the actions are taken on
      // the mediaPlayer instance
    void releaseMediaPlayerResources() {
        if (mediaPlayer != null) {
  
            // it is safe to stop playing the audio 
              // file before releasing the audio file
            mediaPlayer.stop();
  
            // after stop playing the audio file 
              // release the audio resources
            mediaPlayer.release();
        }
    }
}

Escenario 2: cuando el usuario presiona el botón Atrás o Inicio.

  • Si la aplicación es del tipo de lectura de noticias o podcast, siempre que el usuario presione el botón de retroceso o el botón de inicio, la aplicación estará en estado de parada.
  • Entonces, en esta condición, el método onStop debe anularse y los recursos de audio asignados deben liberarse o borrarse.
  • Invoque el siguiente código en el archivo MainActivity.java .

Java

import androidx.appcompat.app.AppCompatActivity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
  
public class MainActivity extends AppCompatActivity {
  
    // Mediaplayer instance to initiate the audio file to play
    MediaPlayer mediaPlayer;
  
    // Button instance to handle the PLAY button
    Button bPlay;
  
    // Implement the on completion listener callback to do 
      // the actions on the media player instance
    // when the audio file gets completely played
    MediaPlayer.OnCompletionListener onCompletionListener = new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            releaseMediaPlayerResources();
        }
    };
  
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
  
        // register the PLAY button with appropriate id.
        bPlay = findViewById(R.id.play_button);
  
        // prepare the audio file for mediaPlayer instance to play it.
        mediaPlayer = MediaPlayer.create(this, R.raw.song);
  
        // handle the play button
        bPlay.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mediaPlayer.start();
  
                mediaPlayer.setOnCompletionListener(onCompletionListener);
            }
        });
    }
  
    @Override
    protected void onStop() {
  
        // Before going to stop state release the 
          // allocated mediaplyer resources
        releaseMediaPlayerResources();
  
        super.onStop();
    }
  
    // dedicated function is made to check the 
      // mediaPlayer instance is null or not
    // based on that the actions are taken 
      // on the mediaPlayer instance
    void releaseMediaPlayerResources() {
        if (mediaPlayer != null) {
  
            // it is safe to stop playing the audio file 
              // before releasing the audio file
            mediaPlayer.stop();
  
            // after stop playing the audio file 
              // release the audio resources
            mediaPlayer.release();
        }
    }
}

El audio debe detenerse cuando se presiona el botón de inicio. Me gusta lo siguiente:

Publicación traducida automáticamente

Artículo escrito por adityamshidlyali y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *