Dienst binden, um die Aktivität oder fragment?
Arbeite ich an einem Musik-player-app. Ich habe einen main-Aktivität, die mehrere Fragmente, die jeweils die Anzeige von songs auf das Gerät-album weisen, Künstler, weiser etc..
Ich habe einen Musik-Dienst behandelt alle der Wiedergabe und andere Sachen.
Was bin ich verwirrt, ist die Bindung dieser service mit verschiedenen Fragmenten, die ich habe.
Jetzt bin ich verbindlich die wichtigsten Aktivität und jedes fragment einzeln mit dem service und der seine Arbeit ziemlich gut. Aber ich Frage mich, ob das wirklich die beste Vorgehensweise? Gibt es eine Möglichkeit, nur binden Sie die Haupt-activity mit dem service und dann einige, wie es in seiner Kind-Fragmente?
Ich vielleicht fehlen einige sehr grundlegende Konzept der Tätigkeit oder Fragmente oder Dienstleistungen. So jemand bitte führe mich in dieser Hinsicht.
Ich denke, es ist mehr eine konzeptionelle Frage, so dass jeder code ist nicht erforderlich. Aber immer noch, wenn es erforderlich ist, dann lassen Sie es mich bitte wissen.
EDIT :
Meine Frage ist: Was wäre eine bessere Art und Weise zu binden, einen service mit einer Aktivität mit mehreren Kind-Fragmente(jeder von denen würde sich mit dem service)?
Vielen Dank für die Beratung. Ist dies der einzige Weg oder gibt es alternativen?
Ich nehme an, das könnte helfen: stackoverflow.com/questions/15235773/...
InformationsquelleAutor Anjani | 2014-06-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Binden die
Service
auf Ihre Aktivität und nicht dieFragment
. Die Beschreibung Ihrer Anwendung, eine Aktivität mit mehrerenFragment
sind vertauscht und aus, macht dieses die meisten (und wirklich nur) praktische Ansatz.Beim binden eines
Service
zu einemActivity
Sie binden Ihren Lebenszyklus zu, dass derActivity
. Sehen Gebundene Services. Jedes mal, wenn Sie hinzufügen oder entfernen einerFragment
in Ihre Aktivität, dassFragment
ist erstellt und zerstört werden. Sie wollen nicht zu versuchen, link-a-service-zu diesem Prozess, denn dann müssen Sie diesen erstellen und zerstören der service jedes mal ein neues fragment wird erzeugt oder zerstört werden.Stattdessen binden Sie an das host -
Activity
. Sie können dann die Interaktion mit dem host-Aktivität von Ihrer Fragmente mit einer Schnittstelle zum Zugriff auf den service gebunden oder durchIntent
.href="http://stackoverflow.com/a/15235902/1140321">stackoverflow.com/a/15235902/1140321 ich empfinde diese Antwort ist noch präziser.Erwarten Sie nicht, alle zu beantworten Ihre Frage und machen Sie bekannt.Lesen Sie andere Fragen auch, bevor Sie posten Sie Ihre Frage.
Vielen Dank für den Hinweis. Ich hatte eigentlich gelesen, dass die Antwort vor dem posten meiner Frage. Und ich hatte versucht zu Lesen, so viel wie ich finden konnte, vor der Buchung. Aber noch war ich nicht sicher, ob die gleiche Antwort bezieht sich auf meine Frage, warum ich, fragte der Autor dieser Antwort hier zu kommentieren, da er/Sie schien ein gutes Verständnis von diesem Thema. Auch niemand die Beiträge hier zu berühmt, sondern sich gegenseitig zu helfen & klare Zweifel. Wenn meine Zweifel bekommen konnte, klar durch das Lesen ein paar Dinge, warum sollte ich warten, für Tage, um eine Antwort zu bekommen. Trotzdem danke. Ich würde halten Sie Ihre Ratschläge im Hinterkopf.
Sollte ich den Konstruktor der Fragmente einschließlich der Instanz der backend-Dienste?
Das hängt davon ab, ob Ihre Bedeutung, Ihre fragment richtig funktioniert. Das ist in der Regel meine Regel, wenn etwas Hinzugefügt, was zu einem Konstruktor.
InformationsquelleAutor Rarw
Ich denke, der cleanear-Architektur binden direkt aus dem fragment. In Bezug auf das problem beschrieben Rarw die Antwort, die Sie binden können, um den service von Ihrer Tätigkeit und von Ihrer Fragmente zu. Auf diese Weise sind Sie sicher, dass der service dort, bis die Aktivität nicht zerstört.
Ich sehe vor allem zwei Vorteile bei der Verbindung aus dem fragment:
UPDATE
Hier ist ein sehr einfaches Projekt, die dies zeigen.
https://github.com/ena1106/FragmentBoundServiceExample
Ich denke, das sollte die akzeptierte Antwort. Die Antwort auf diese Art von Frage ist "Es hängt". Also ich glaube, wenn es Sinn macht, statt es in einem fragment über die Tätigkeit definitiv tun.
InformationsquelleAutor Ena
Können Sie den Zugriff auf Ihre Aktivität aus einem fragment von
getActivity()
Ich würde binden an so wenige Personen wie möglich aber ich habe keine Ahnung, ob es ratsam ist oder nicht.
getActivity() null zurückgeben kann. Besser onAttach(), ref stackoverflow.com/a/11743728/763176
getActivity zurück übergeordneten Aktivität des fragments verwendet wird. so ist es garantiert nicht, welche Art der Aktivität es sich handelt.
InformationsquelleAutor Alexander Kulyakhtin
können Sie die Schublade mit dem event-bus Muster mit dieser Bibliothek , eventbus publish/subscribe-Muster.https://github.com/greenrobot/EventBus überprüfen Sie die Projekt-Website für weitere Informationen.
können Sie Ereignisse senden, die von/zu Dienst aktiv oder Fragmente
InformationsquelleAutor ingyesid
WENN Sie brauchen, um einige Daten von Ihrem Dienst zu Ihrem fragment am Anfang des fragment-Lebenszyklus, die onServiceConnected auf Aktivität konnte nicht aufgerufen werden, noch, vor allem, wenn Sie Ihr Gerät drehen, und du bekommst eine NPE.
Ich denke, das ist eine gute Idee, lassen fragment seine eigenen verbindungen seit der Dienst gestartet wird mit startService() und nicht mit bindService().
InformationsquelleAutor Informatheus
Ich Dienst binden in Meiner Host-Aktivität,und pass Ibinder s Objekt-Bundle,, welches ist gesetzt in den Argumenten.
und mein code vielleicht so:
InformationsquelleAutor fantianwen
Die einzige Methode, die ich gefunden habe, zuverlässig ist mit einem loader in
Fragment
:Loader
im fragmentcontext
desLoader
(activity
iminitLoader
an, wenn das FragmentonCreate
genannt wird)onStartLoading
mit einemServiceConnection
fordertforceLoad()
sobald der Dienst gebunden istonStartLoading
/onStopLoading
onStopLoading
InformationsquelleAutor junique