Autore Topic: App che gira in background  (Letto 1112 volte)

Offline esoni

  • Utente junior
  • **
  • Post: 102
  • Respect: 0
    • Mostra profilo
App che gira in background
« il: 04 Aprile 2014, 10:18:00 CEST »
0
Ciao a tutti, vi dico in poche parole cosa devo realizzare. Devo sviluppare una app che interroga un webservice.  Vorrei che quando l'utente chiude la app, la app continuasse a girare in background  e in polling ogni ora contatta lo web service, se c è nuovi dati spara una local notification per allertare l'utente che ci sono nuovi dati.
Documentandomi ho capito che devo: utilizzare un service che gira in una ltro processo dall'activity. Fin qua ci sono. Ma quando l'utente chiude la app non è che muore l'activity ? il service continua a girare , ma i dati a chi li passa se l'activity è morta ? oppure c è un modo per non far morire l'activity ?
grazie dario

iClaude

  • Visitatore
Re:App che gira in background
« Risposta #1 il: 04 Aprile 2014, 10:39:41 CEST »
0
Dal Service puoi creare una Notification, lanciare una Activity nuova, agganciarti ad una Activity esistente, ecc.

Offline esoni

  • Utente junior
  • **
  • Post: 102
  • Respect: 0
    • Mostra profilo
Re:App che gira in background
« Risposta #2 il: 04 Aprile 2014, 12:35:10 CEST »
0
ciao grazie del consiglio.
quindi cghe faresti, un alarm manager ogni ora ( frequenza di polling) nel mio service. se ci sono dati nuovi sparo una local notification. e se vorrei aggangiarmi/avviare l'activity per mostrare i nuovi dati come faccio a capire se l'activity e viva o se devo avviarla ?

iClaude

  • Visitatore
Re:App che gira in background
« Risposta #3 il: 04 Aprile 2014, 12:41:51 CEST »
0
Una possibile soluzione è utilizzare un binding Service collegato con un'interfaccia callback all'Activity chiamante. Con questo sistema è immediato verificare se c'è una Activity collegata al Service o no.
Sul mio blog c'è un tutorial completo con relativo codice.

Offline esoni

  • Utente junior
  • **
  • Post: 102
  • Respect: 0
    • Mostra profilo
Re:App che gira in background
« Risposta #4 il: 04 Aprile 2014, 12:45:27 CEST »
0
grazie mille ancora. potresti linkarmi l'articolo specifico ?
ci do subito un occhiata cosi

iClaude

  • Visitatore
Re:App che gira in background
« Risposta #5 il: 04 Aprile 2014, 12:47:30 CEST »
0
Ce ne sono pochi, lo trovi subito, si intitola Binding Services...

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +153
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:App che gira in background
« Risposta #6 il: 04 Aprile 2014, 14:16:36 CEST »
0
ciao grazie del consiglio.
quindi cghe faresti, un alarm manager ogni ora ( frequenza di polling) nel mio service. se ci sono dati nuovi sparo una local notification. e se vorrei aggangiarmi/avviare l'activity per mostrare i nuovi dati come faccio a capire se l'activity e viva o se devo avviarla ?

Perchè avviare una activity quando hai già mandato una notifica? L'utente è già avvisato.
Se l'activity è attiva puoi usare un broadcast. In questo caso io valuterei se mandare anche la notifica.

Inoltre.
Valuta l'alternativa di usare un GCM, piuttosto che fare un polling ogni ora.

Offline esoni

  • Utente junior
  • **
  • Post: 102
  • Respect: 0
    • Mostra profilo
Re:App che gira in background
« Risposta #7 il: 05 Aprile 2014, 13:19:50 CEST »
0
ciao non vorreiu usare GCM. Vi spiego come vorrei strutturarla
-ho l activity che quando si avvia si binda cols ervice ( se non esiste lo crea, altrimenti usa quello gia esistente)
-l'activity ha un tasto refresh, alla pressione del tasto refresh viene invocata un operazione resa disponibile dall interfaccia del service. Il service a questa chiamata leggi i dati dal web service e li restituisce alla activity
-se l'utente stoppa la app, voglio che il service continui a girare, ed ogni ora controlli se c è nuovi dagti  e in caso affermativo spara una local notification.
ecco i dubbi
1) il service deve girare all interno del solito processo dell activity per le mie esigenze? credo di no. me lo confermate
2) ho visto che c è molti modi per interagire tra service e activity. quale modo mi consigliate ? credo che se stiano su due processi diversi l'interazione sia piu difficle da realizzare
3)  il service run time può sapere se ci sono activity bindate a se stesso ?
grazie a tutti

iClaude

  • Visitatore
Re:App che gira in background
« Risposta #8 il: 07 Aprile 2014, 10:31:09 CEST »
0
1) all'interno del Service devi creare un thread separato per gestire le operazioni via internet
2) e 3) vedi risposte prec.

Offline esoni

  • Utente junior
  • **
  • Post: 102
  • Respect: 0
    • Mostra profilo
Re:App che gira in background
« Risposta #9 il: 08 Aprile 2014, 08:24:17 CEST »
0
GRAZIE MILLE TUTTO CHIARO :) mi rimane un unico dubbio. quando premo back nella mia app l activity muore.. il service che fa ? a me serve che rimanga vivo e che ogni ora vad aa vedere se ci sono nuovi dati, e in caso affermativo spari una local notification

iClaude

  • Visitatore
Re:App che gira in background
« Risposta #10 il: 08 Aprile 2014, 08:35:44 CEST »
0
Devi usare startForeground e stopForeground all'interno del Service, così viene considerato come processo in primo piano.

Offline esoni

  • Utente junior
  • **
  • Post: 102
  • Respect: 0
    • Mostra profilo
Re:App che gira in background
« Risposta #11 il: 16 Aprile 2014, 09:04:06 CEST »
0
ciao a tutti,
inanzi tutto grazie per i consigli. PRIMA di mettermi a capo dritto sul mio progetto sto facendo dei mini esempi per studiare l uso dei service.
Il service che devo implementare deve avere 2 caratteristiche:
-1) anche se l'activity muore deve ogni 10 minuti contattare uno web service e sparare una notification con la risposta del web service: per implementare questo l'activity quando nasce fa la chiamata allo startservice(serviceintent), e il mio service quando nasce fa partire un thread che usa startForeground e stopForeground e ogni 10 minuti contatta il web service
-2) oltre al refresh automatico di 10 minuti la mia activity ha un tasto refresh, il quale deve ordinare al service di contattare subito il web service: dato che il mio service deve essere indipendente dalla vita della mia activity non deve essere un bindservice. allora mi chiedo senza essere bindservice come fa il mio service a mettere a disposizione un interfaccia, ovvero un metodo per ordinare il refresh ?

iClaude

  • Visitatore
Re:App che gira in background
« Risposta #12 il: 16 Aprile 2014, 10:11:33 CEST »
0
Nella tua Activity puoi creare un AlarmManager che ogni 10 minuti (è preferibile usare il metodo setInexactRepeating) fa partite il Service che recupera i dati da internet.
Dal Service crei la notifica con il risultato. Per comunicare direttamente il risultato alla tua Activity puoi usare un BroadcastReceiver, meglio se Local.

Offline esoni

  • Utente junior
  • **
  • Post: 102
  • Respect: 0
    • Mostra profilo
Re:App che gira in background
« Risposta #13 il: 16 Aprile 2014, 11:44:33 CEST »
0
ma io vorrei che se chiudo la app (quindi activity muore) il mio service continui a sparare notification ogni 10 minuti

Post unito: 16 Aprile 2014, 11:47:10 CEST
un po come fa gmail.. chiudo la app. ma ti arriva una notifica se arriva una mail. come posso realizzare questo ?
« Ultima modifica: 16 Aprile 2014, 11:47:10 CEST da esoni, Reason: Merged DoublePost »

iClaude

  • Visitatore
Re:App che gira in background
« Risposta #14 il: 16 Aprile 2014, 11:52:09 CEST »
0
AlarmManager...si attiva con un certo intervallo anche se l'app è chiusa,  a meno che non spegni il telefono.
Da lì fai partire il Service.