6

Ho ottenuto una sola Main-Activity in cui creo in modo dinamico le pagine all'interno di un ViewPager (tramite FragmentPagerAdapter). Fin qui tutto bene.Collegamento e interruzione del servizio Android a/da Framment (in ViewPager)

Ora ho un servizio-Implementazione Voglio che l'attività/quei frammenti si leghino a. E questo è il punto che mi chiedo quale sia la migliore pratica.

  1. Associazione all'attività e comunicazione dal frammento al servizio tramite richiamata tramite l'attività? (vincolante/non vincolante in onCreate()/onDestroy())
  2. Legare a ogni frammento sulla creazione e separare una volta distrutto? (come sopra)

Entrambe le implementazioni sembrano funzionare. Ma la seconda offre una comunicazione più dritta con il servizio.

Durante il test, i secondi frammenti sono obbligati a eseguire il servizio durante la creazione. Ma quando rimuovo tutti tranne uno, non sembrano essere distrutti. Quando inizio a creare nuovamente frammenti da quel punto (solo 1 frammento dopo aver eliminato altri), il binding al servizio avviene solo quando creo più frammenti di quelli creati in precedenza.

Forse di nuovo per una migliore panoramica.

  • creare attività con un frammento in pager: servizio collegato a frammentare
  • creare altre 2 frammenti di cercapersone: servizio conntected su ogni creazione
  • eliminando tutti ma un frammento: unbinding sembra non essere chiamato
  • creare altre 2 frammenti ancora: servizio sembra non essere collegato
  • creare un altro frammento: servizio conntected sulla creazione

È questo il comportamento che ci si può aspettare? È questa l'implementazione che dovrei scegliere; comunicazione chiaramente più marcata come nella callback-communication?

Grazie per l'input in anticipo!

+3

Ho costruito uno scenario simile usando il tuo primo approccio (l'attività gestisce la comunicazione al servizio) e ha funzionato abbastanza bene. Ciò mi consente di condividere la connessione di servizio su tutti i frammenti e di consentire al "più" accesso immediato al servizio (senza dover fare i conti con l'asincronia di binding) – roostertech

risposta

4

Preferisco il primo metodo soprattutto se si utilizza un servizio locale perché si dispone di un handle per il servizio.

Si supponga che l'attività abbia già un riferimento al servizio locale denominato "MyLocalService" (Checkout the Local Service Example). Quindi dal tuo frammento puoi facilmente chiamare qualcosa come: getActivity(). GetMyLocalService(). La cosa buona di questo è che il tuo frammento non ha a che fare con il ciclo di vita del servizio. Spero che questo ti aiuti.

+1

Sì, aiuta! ;) Pensa che i miei pensieri erano poco complicati. Fornire il servizio tramite alcuni getActivity(). GetMyService() farà il trucco ed eviterà possibili errori menzionati con l'associazione asincrona. – mauricemoss