2017-05-19 4 views
0

Ich habe ein Problem mit dem Dienst.Der Dienst erstellt neue Instanz von Mediaplayer

In der Methode onCreate erstelle ich Media Player. Wenn ich zwischen verschiedenen Aktivitäten auswechsle, kann ich problemlos auf den Dienst zugreifen und die Media Player-Instanz beibehalten. Obwohl, wenn ich Anwendung verlasse (Audio von den Dienstleistungen, die Mediaplayer noch spielt) und dann zu der Anwendung zurückkehre - ich bekomme neue MediaPlayer-Instanz. Der Audiostream von der vorherigen Instanz wird noch wiedergegeben.

Ich hätte gerne den Zugriff auf die gleiche Instanz von MediaPlayer, um manipulierendes Lied zu manipulieren (Pause zum Beispiel).

Weißt du, was das Problem sein könnte?

+1

Überprüfen Sie, ob onDestroy() des Dienstes aufgerufen wird oder nicht. – Naetmul

+1

Wenn Sie die Verbindung trennen, wenn die Aktivität beendet ist, kann der Dienst beim Verlassen der Anwendung zerstört werden. Überprüfen Sie das zuerst. – Naetmul

+0

Ihr Code ist nicht vollständig, legen Sie Ihre vollständige Klasse oder zumindest vollständigen Funktionscode hier. – chandil03

Antwort

1

Ein gebundener Dienst wird heruntergefahren, wenn der Dienst für alle Bindungen ungebunden wird.
Ein Dienst, der von startService() gestartet wird, wird heruntergefahren, wenn der Dienst durch Aufruf von stopSelf() oder stopService() heruntergefahren wird.

Ein Dienst, der von startService() und bindService() aufgerufen wird, wird zerstört, wenn AND stopSelf() oder stopService().

Ein Dienst kann sowohl gestartet werden als auch über Verbindungen verfügen. In einem solchen Fall wird das System den Dienst so lange laufen lassen, wie es entweder gestartet ist oder es gibt eine oder mehrere Verbindungen mit das Context.BIND_AUTO_CREATE-Flag. Sobald keine dieser Situationen halten, wird die onDestroy() -Methode des Dienstes aufgerufen und der Dienst effektiv beendet. Alle Bereinigungen (Threads stoppen, Registrierung von Empfängern aufheben) sollten nach der Rückkehr von onDestroy() abgeschlossen sein.
- Von Service.Service Lifecycle | Android Developers Doc

In Ihrem Fall, wenn die Aktivitäten verschwunden sind, scheint der Dienst den ungebundenen Zustand einzutreten und zerstört werden kann.
Vielleicht müssen Sie startService() in demselben Dienst aufrufen, wenn Sie die Wiedergabe starten, und stopSelf() aufrufen, wenn Sie die Wiedergabe stoppen, damit der Dienst nicht während der Wiedergabe von Medien zerstört werden kann.

HINWEIS: Einige sagen, dass Sie stopSelf() aufrufen müssen, nachdem alle freigegeben wurden. Manche sagen, dass die Reihenfolge von Stop und Unbind nicht relevant ist. Ich weiß nicht, was richtig ist.

+0

Vielen Dank, ich habe den Dienst nicht von startService, sondern von bindService gestartet, und dies war die Wurzel des Problems. – Orbite

Verwandte Themen