Czy lepiej związać usługi FragmentActivity
:Bindować usługę FragmentActivity lub Fragment?
bindService(Intent, ServiceConnection, int);
lub Fragment
:
getActivity().bindService(Intent, ServiceConnection, int);
Co jest lepsze praktyki?
Czy lepiej związać usługi FragmentActivity
:Bindować usługę FragmentActivity lub Fragment?
bindService(Intent, ServiceConnection, int);
lub Fragment
:
getActivity().bindService(Intent, ServiceConnection, int);
Co jest lepsze praktyki?
Czy lepiej związać usługi FragmentActivity ... lub fragmentowi
Są takie same jak masz je tutaj napisane. getActivity()
nie jest Fragment
- jest to metoda zwracająca wartość Activity
. Nie można zadzwonić pod numer bindService()
na numer Fragment
.
Co to jest lepsza praktyka?
Ani. Powiąż obiekt Application
, uzyskany przez getApplicationContext()
, z ServiceConnection
zarządzanym przez (lub być może w rzeczywistości będącym) zachowanym Fragment
.
Powodem są zmiany w konfiguracji. Wiązanie jest stanem. Musisz zachować ten stan przez zmiany konfiguracji. Podczas gdy zatrzymany Fragment
może pomieścić ServiceConnection
, istnieje niejawny remis w systemie pomiędzy ServiceConnection
i Context
, który zarejestrował go dla wiązania. Ponieważ działania mogą zostać zniszczone i odtworzone po zmianie konfiguracji, numer Activity
nie jest dobrym wyborem tutaj: Context
. Application
, który jest systemem globalnym, jest bezpieczniejszym wyborem i jednym z niewielu miejsc, w których wybór Application
na inny Context
jest mądrym posunięciem IMHO.
Here is a blog post z mojego, od czasu przed fragmentami, które dostaje się do tego trochę więcej. Here is a sample project demonstrując technikę.
Czy możesz podzielić się swoją opinią na ten temat: http://stackoverflow.com/questions/24309379/bind-service-to-activity-or-fragment – Anjani
Patrząc na twoje demo, wygląda na to, że masz przeciekającą pamięć. Zachowujesz odniesienie do elementu interfejsu użytkownika w zatrzymanym Fragmentie, więc stary Kontekst będzie nadal odwoływany, nawet jeśli konfiguracja mogła ulec zmianie. Zachowałbym elementy UI w osobnym Fragmentie. – mkuech
@mkuech: Ten element UI jest ustawiony na nową wartość w 'onCreateView()'. Dlatego po zmianie konfiguracji fragment nie będzie już trzymał starego widgetu. – CommonsWare