2011-01-20 13 views
22

Il bug che sto vedendo è sulle chiamate a reset() e release() che non torna mai lasciando la mia applicazione in uno stato di arresto indefinito. Non importa se chiamo stop() prima di reset() o release() il blocco può sempre essere riprodotto.Errore MediaPlayer Android durante l'utilizzo delle chiamate reset() e release()

Chiunque ha riscontrato problemi simili con il blocco di MediaPlayer? Qualche consiglio? Sto lavorando su un'applicazione multi-thread.

Il DDMS riporta la seguente quando guardando i fili che tengono:

CLASS | METODO | FILE | LINEA | NATIVE

android.media.MediaPlayer _la release MediaPlayer.java -2 vero
android.media.MediaPlayer rilasciare MediaPlayer.java 1049 falsa

+0

Ho anche avuto questo problema. C'è qualche soluzione per risolverlo? – Judy

+0

@Judy non abbiamo mai trovato una soluzione. Abbiamo provato un sacco di combinazioni e hack. Alla fine siamo passati dall'utilizzo delle API multimediali di livello superiore di Android. Non consigliato a tutti, ma nel nostro caso era necessario il pieno controllo della riproduzione, quindi costruiamo il nostro lettore da zero. – Jona

risposta

8

Potrebbe essere incappato in questo errore: http://code.google.com/p/android/issues/detail?id=959. Si è seduto per un po 'di tempo, non mi aspetterei che venga affrontato in tempi brevi, sfortunatamente.

+0

Grazie Penso che questo sia il più vicino possibile ad una risposta ... almeno per ora ... – Jona

0

Ho anche affrontato questo problema in Android 2.2, quando si chiama MediaRecorder.release();

A volte non ha risposto, il mio flusso di programma è rimasto bloccato su di esso. che causa il mio UI congelare, e portare ANR più tardi ....

A proposito, il mio cliente dice che non devono affrontare quando si usa Android 2.3.3

questo: http://code.google.com/p/android/issues/detail?id=959#makechanges

E questo: http://code.google.com/p/android/issues/detail?id=5047#makechanges

0

Se si sta semplicemente cercando di avviare il brano/suono fin dall'inizio, è possibile scrivere una funzione di reset, che fa semplicemente:

mediaplayer.seekTo(0);

Ho cambiato il mio stop(); in: pausa, quindi seekTo.

+0

L'importante è semplicemente interrompere la riproduzione. – Jona

1

Se si sta sviluppando per livello API 16 o superiore, si consiglia vivamente di lanciare il crappy MediaPlayer e utilizzare Exoplayer da Google.

Ho fatto e non ho mai guardato indietro. Dal momento che anch'io supporto il livello API 15, ho un'astrazione per usare MediaPlayer standard quando in API e Exoplayer quando in 16 (o 17 non ricordo ora).

Non è perfetto, ma è molto meglio e ho visto molto molto meglio buffering.

Problemi correlati