2010-08-31 10 views
28

Ho visto la presentazione di I/O di Google di Virgil Dobjanschi sul modo corretto di implementare REST su Android con servizi e provider di contenuti. http://code.google.com/events/io/2010/sessions/developing-RESTful-android-apps.htmlChe cos'è un callback di binder su Android?

In base al video, sto facendo le cose nel modo sbagliato, il che non è sorprendente considerando quanto sia difficile la strada giusta. Ad ogni modo, avendo mostrato la terra promessa nel video sto avendo un po 'di problemi a capire come arrivarci.

La maggior parte di esso è stata inchiodata, ma l'unica cosa che mi ha sconfitto è il Richiamo di Raccoglitore che Virgil fa riferimento alle diapositive (vedi link sopra), a pagina 43 mostra il punto 2 come avvio del servizio con startService (intento) e passaggio 10 come informazioni sullo stato di ritorno utilizzando un callback di Raccoglitore. Non c'è codice di esempio in nessuna parte della presentazione che è piuttosto frustrante. Si parla di open sourcing del client Twitter che apparentemente utilizza questo approccio ma ancora nulla e l'annuncio è stato in aprile.

Nel video afferma: "Che cos'è un callback di binder? Un callback di binder, pensalo come un'interfaccia che è stata passata nell'intenzione della richiesta".

Ho cercato dappertutto ma non sono stato in grado di trovare alcun documento o esempi che mostrano come passare una richiamata come parte di un intento. Né riesco a capire nessun altro modo di passare una richiamata.

Ho pensato che potrebbe riferirsi al binding al servizio e all'implementazione del callback in questo modo. Tuttavia, si riferisce specificamente a un servizio locale e utilizza strarSerice() e non bindService(). Anche con bindService() il servizio verrà distrutto se l'attività viene distrutta e ciò vanifica l'idea. La soluzione alternativa è utilizzare startService() e quindi bindService() e lasciare il servizio in esecuzione per la durata. L'altro problema con bindService() è che il callback non può essere utilizzato fino al completamento di onServiceConnected() che complica ulteriormente il codice poiché le istruzioni di azione non possono essere passate nell'intento perché la richiamata di ritorno potrebbe non essere in vigore in tempo per restituire i risultati.

Sono interessato solo a implementarlo utilizzando l'approccio consigliato. Qualcuno può far luce su cosa sia un callback di Binder e su come codificarlo. Anche in relazione a questo, qualcuno sa che aspetto avrebbe un Assistente di servizio a parte l'abbuffata di un singleton?

Qualsiasi aiuto qui sarebbe molto apprezzato. Grazie Clive

risposta

14

avrebbe potuto essere riferimento a un ResultReceiver, o forse createPendingResult(). Ecco a pair di sample projects dimostrando l'uso di quest'ultimo.

+0

Grande, grazie, non avevo familiarità con ResultReceiver ma sicuramente sembra adattarsi a ciò di cui Virgil stava parlando, l'ho implementato e funziona bene. Solo curioso, perché sei passato da ResultReceiver a createPendingResult()? –

+0

@Clive Jackson: ha faticato un po 'con 'ResultReceiver' ed ha scelto di metterlo da parte per il momento. Probabilmente tornerò su di esso un giorno. – CommonsWare

Problemi correlati