Ist es besseren Service FragmentActivity zu binden ... oder
Sie gleich fragmentieren, wie Sie sie hier geschrieben haben. getActivity()
ist kein Fragment
- es ist eine Methode, die Activity
zurückgibt. Sie können bindService()
nicht auf einem Fragment
aufrufen.
Was ist eine bessere Praxis?
Weder. Binden an das Application
Objekt, erhalten über getApplicationContext()
, mit dem ServiceConnection
verwaltet von (oder vielleicht eigentlich ist) ein beibehalten Fragment
.
Der Grund ist Konfigurationsänderungen. Eine Bindung ist ein Zustand. Sie müssen diesen Status über Konfigurationsänderungen hinweg beibehalten. Während eine beibehaltene Fragment
kann halten auf ServiceConnection
, gibt es eine implizite Bindung im System zwischen ServiceConnection
und Context
, die es für eine Bindung registriert. Da Aktivitäten bei Konfigurationsänderungen zerstört und neu erstellt werden können, ist die Activity
hier keine gute Wahl Context
. Application
, die system-global ist, ist eine sichere Wahl, und einer der wenigen Orte, an denen die Wahl Application
über eine andere Context
ist eine weise Bewegung IMHO.
Here is a blog post von mir, aus einer Zeit vor Fragmenten, das kommt in diesem ein bisschen mehr. Here is a sample project demonstriert die Technik.
Könnten Sie bitte Ihre Meinung dazu teilen: http://stackoverflow.com/questions/24309379/bind-service-to-activity-or-fragment – Anjani
Mit Blick auf Ihre Demo scheint es, dass Sie Speicher verlieren. Sie behalten einen Verweis auf ein UI-Element in einem beibehaltenen Fragment, sodass auf einen alten Kontext immer noch verwiesen wird, obwohl sich die Konfiguration möglicherweise geändert hat. Ich würde die UI-Elemente in einem separaten Fragment behalten. – mkuech
@mkuech: Dieses UI-Element wird in 'onCreateView() 'auf einen neuen Wert gesetzt. Daher wird das Fragment nach der Konfigurationsänderung das alte Widget nicht mehr halten. – CommonsWare