2013-03-25 10 views
16

Devo mantenere un canale di comunicazione bidirezionale aperto tra un'app Android e un server esterno. So che posso utilizzare GCM per questo, ma per vari motivi che non riguardano Android, a sua volta, mi piacerebbe utilizzare websockets, se possibile.Websockets rispetto a GCM sotto Android: utilizzo della batteria?

Qualcuno può indicarmi un confronto tra le statistiche sull'utilizzo delle risorse/della batteria quando si utilizza GCM rispetto a un client Websocket basato su Java in Android?

Grazie in anticipo.

+0

Probabilmente dovresti scegliere la risposta come corretta. – npgall

+0

@HippopotamusMan Ho la stessa richiesta, per lo stesso motivo. Puoi saltare di nuovo in questo? Stai ancora utilizzando WebSocket personalizzati o usi FCM/GCM? Stiamo testando la nostra APP e sta usando molta batteria. Non sono sicuro se questo è per WebSockets ma lo pensiamo. –

risposta

25

Dal momento che più applicazioni utilizzano GCM che utilizza una singola connessione socket al cloud di Google, far sì che l'applicazione utilizzi GCM per le notifiche non dovrebbe influire sulla durata della batteria poiché utilizza solo una connessione esistente. D'altra parte, qualunque processo venga creato utilizzando websockets, l'utilizzo della batteria verrà semplicemente aggiunto a GCM.

Inoltre, se è necessario mantenere la connessione anche quando l'applicazione non è in primo piano, sarà necessario creare l'applicazione come servizio in primo piano. GCM gestisce questo per te.

Aggiornamento
Un dispositivo che non ha altre applicazioni che utilizzano MCG è un caso molto raro dal momento che molte applicazioni essenziali come l'uso gmail GCM. Non ho numeri esatti sull'utilizzo della batteria di GCM. Ma l'utilizzo della batteria di C2DM (il predecessore di GCM che utilizza lo stesso modello di comunicazione sottostante) è menzionato in this video circa 4 minuti in. Avevo effettivamente una domanda simile sull'uso della batteria di una connessione socket persistente a un server esterno (Android persistent socket connection rules). Sebbene non sia una websocket, immagino che l'utilizzo della batteria sia simile. Ma dato che GCM è integrato in un livello molto più basso del sistema operativo, lo immaginerei più ottimizzato di una soluzione personalizzata.

A meno che non si disponga di una politica aziendale contro l'utilizzo di un server di terze parti o di specifiche molto specifiche, raccomanderei l'utilizzo di GCM. Incoraggerei anche a guardare l'intero video su C2DM e su this video for GCM.

+0

Grazie, Alex. Quindi, per quanto riguarda il seguente semplice caso: uno e un solo processo Android ha bisogno di comunicazione a due vie con un server esterno? GCM e websocket sono ugualmente efficienti per quanto riguarda l'utilizzo delle risorse Android (batteria, ecc.) In questo caso degenerato, o uno sarebbe migliore dell'altro. – HippopotamusMan

+0

Aggiunto un aggiornamento alla risposta. Impossibile adattarlo nella sezione dei commenti. – Alex

+0

Grazie. Controllerò il video più tardi e le tue informazioni sono molto utili. Sembra che probabilmente userò GCM. – HippopotamusMan