Uso la classe MediaPlayer in un'app a cui sto lavorando attualmente. Voglio mantenere un'istanza della classe MediaPlayer per tutta la durata della mia attività. Sto liberando le risorse della classe MediaPlayer nel onPause() {} Il metodo dell'attività, tuttavia quando l'attività inizia vedo il seguente avviso pop-up nella finestra LogCat:Android: MediaPlayer finalizzato senza essere rilasciato
W/MediaPlayer-JNI(16795): MediaPlayer finalized without being released
Qualsiasi idea di quello che sto sbagliando qui o come rimuovere questo avviso? Non sembra causare problemi e il suono funziona bene.
Ho un po 'troppo codice per postare perché ho spostato alcuni oggetti per consentire lo stato di essere gestito (la classe MediaPlayer attualmente non fornisce informazioni sullo stato), e vari altri motivi, ma il codice è più o meno:
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
initialiseSounds(this);
}
@Override
protected void onPause()
{
soundManager.releaseResources();
}
@Override
protected void onResume()
{
initialiseSounds(this);
}
Con questo metodo nella mia classe SoundManager:
public void releaseResources()
{
player.release();
}
E in initialiseSounds sto facendo:
MediaPlayer player = new MediaPlayer();
player.reset();
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
AssetFileDescriptor assetFileDescriptor = context.getResources().openRawResourceFd(resourceId);
setDataSource(player, assetFileDescriptor);
Quando voglio riprodurre la traccia che faccio:
player.prepare();
player.start();
Apprezzare tutto il consiglio,
Grazie,
È possibile includere i frammenti di codice rilevanti di ciò che si sta facendo per il mediaplayer in onCreate/onResume/onPause, ecc.? "liberare le risorse" potrebbe essere interpretato in modo un po 'ambiguo. – Tim
@Tim Ciao Tim, ho aggiunto del codice alla domanda, grazie! – magritte