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.
- Cree un proyecto de Android Studio de actividad vacío.
- Consulte el Android | ¿Cómo crear/comenzar un nuevo proyecto en Android Studio? sobre cómo crear un proyecto de estudio de Android de actividad vacía. No
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:
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