2011-10-25 16 views
5

Ho una visualizzazione Web nella mia app per Android da cui viene richiamato un sacco di javascript dal nostro server. Voglio implementare un sistema in cui un segnale dal server si riattiva/riavvia l'app e la porta in primo piano per avvisare l'utente. So che questo è orribilmente antipatico ma nel mio caso è necessario.Webview Android all'interno di un servizio?

Sembra che l'unico modo per ottenere questo risultato sia che la WebView viva in un servizio (poiché le attività possono essere eliminate dal sistema operativo in qualsiasi momento). Qualcuno sa come funzionerebbe? Ho letto che WebViews può risiedere solo in Attività.

Grazie !!

risposta

4

WebViews può solo risiedere nelle attività solo perché sono un componente dell'interfaccia utente. Il modo migliore per risolvere questo problema è scaricare la comunicazione che il tuo javascript sta facendo nel servizio stesso. Questo è solo il modo in cui funziona Android. L'unica altra soluzione è quella di rendere la comunicazione javascript/server tollerante agli errori abbastanza da poter resistere alla perdita di connessione in qualsiasi momento. Per le idee su come farlo, guarderei nel modello REST. Se desideri avere un'idea migliore sull'utilizzo di REST con Android, ti suggerisco di fare questo video from Google IO. Fino ad oggi, è uno dei miei preferiti.

Per quanto riguarda l'invio di un segnale dal server per l'avvio di un'attività, questa è una possibilità in una certa misura. Avrai bisogno di ascoltare qualcosa sul dispositivo, molto probabilmente un servizio. Potresti fare il tuo servizio per un lungo sondaggio e quindi sederti lì in attesa di una risposta. Quando è ottenere è la risposta dal server, si potrebbe poi fare un

Context.startActivity(intent) 

Dove intento è l'intento esplicito specificando l'attività che si desidera avviare. Detto questo, un servizio può essere ucciso anche se le risorse stanno diventando scarse sul dispositivo. Inoltre, la connettività Internet potrebbe essere persa in qualsiasi momento (si tratta di telefoni cellulari e le persone spesso utilizzano i telefoni cellulari in luoghi in cui non dispongono di connettività Internet).

La linea di fondo è che i dispositivi non sono progettati per essere affidabili al 100% in termini di connettività. La cosa più intelligente da fare sarebbe cambiare le specifiche dell'app in modo che siano più tolleranti ai guasti.

Può sembrare schietto, ma non c'è altro che posso dire se non "Non farlo, non farlo mai". Più costruttivamente, direi che se fai le cose per bene, dovresti essere in grado di spingere le tue cose in background e non disturbare mai l'utente. Ricorda, BACIO, non è solo una banda con un esercito. È una bella filosofia. Keep it simple stupido. Potresti dare un'occhiata a questo video, è uno dei miei preferiti e potrebbe aiutarti a metterti in uno stato mentale diverso. È utile?

+0

OK, questo ha senso. Potresti far luce sul problema di riportare la mia app in prima linea? – TomBomb

+0

Modificato la mia risposta per ulteriori domande. –

+0

Grazie Kurtis, questo è di grande aiuto. Sto elaborando un modo per non fidarmi totalmente dell'attività/servizio in ogni momento. Sto iniziando l'attività come descritto sopra, tuttavia il mio problema è che ho bisogno che la mia app si concentri di nuovo una volta avviato l'intento. Se l'utente è in un'altra applicazione quando chiamo startActivity(), la mia applicazione rimane in background. qualche idea? – TomBomb

1

TomBomb, grazie per aver accettato la mia risposta precedente ma penso che potrei avere qualcos'altro di utile per te. Invece di forzare un'attività in primo piano, perché non utilizzare uno Status Bar Notification per far sapere agli utenti che qualcosa di nuovo è arrivato dal server?