Autore Topic: service sempre attivo in background. come si fa?  (Letto 1608 volte)

Offline specialdo

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg Optimus One
  • Sistema operativo:
    Mac OS X 10.6.8
service sempre attivo in background. come si fa?
« il: 20 Maggio 2014, 21:29:06 CEST »
0
ciao a tutti
sto sviluppando un'app che al cliccare del pulsante AVVIA, fa partire un service con all'interno un thread che fa determinate cose... il mio obiettivo è lasciare il service costantemente attivo in background fin quando non viene premuto il pulsante ARRESTA.

se apro un'altra app, il service rimane attivo ma se provo a chiudere l'app dall'elenco delle app recenti aperte, il service viene interrotto e si riapre automaticamente dopo qualche secondo(senza l'activity stavolta). me ne accorgo perchè nei metodi onstart(), onstartCommand() ecc ho messo delle toast notification.

come faccio a lasciare il service sempre attivo, anche se viene chiusa l'app dello stesso package? devo far partire il service in un processo separato?

grazie a quanti mi aiuteranno!

Offline tonno16

  • Utente storico
  • *****
  • Post: 1197
  • Respect: +58
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:service sempre attivo in background. come si fa?
« Risposta #1 il: 21 Maggio 2014, 19:01:13 CEST »
0
ciao.

devi usare un service, ovvero crei una classe del tipo:
Service | Android Developers

parti solo col fare l'Override del onStartCommand e settanto return START_STICKY, cosi facendo il servizio si riavvia in caso di arresto dell'app

poi fai l'Override di onDestroy, magari devi liberare risorse o stampare "servizio arrestato"

prova e fammi sapere. Intanto implementa solo questi due e vedi se ne capisci. Dentro onStartCommand puoi richiamare qualsiasi altro metodo di tuo gradimento

Offline specialdo

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg Optimus One
  • Sistema operativo:
    Mac OS X 10.6.8
Re:service sempre attivo in background. come si fa?
« Risposta #2 il: 23 Maggio 2014, 10:46:25 CEST »
0
ciao.

devi usare un service, ovvero crei una classe del tipo:
Service | Android Developers

parti solo col fare l'Override del onStartCommand e settanto return START_STICKY, cosi facendo il servizio si riavvia in caso di arresto dell'app

poi fai l'Override di onDestroy, magari devi liberare risorse o stampare "servizio arrestato"

prova e fammi sapere. Intanto implementa solo questi due e vedi se ne capisci. Dentro onStartCommand puoi richiamare qualsiasi altro metodo di tuo gradimento

ciao tonno..grazie per avermi risposto!

allora, io la mia activity e il mio service li ho già creati e funziona tutto perfettamente. unico problema è che se chiudo l'activity (cioè killo l'app), viene chiuso anche il service (forse perchè sono nello stesso processo). dopo la chiusura dell'activity e del service, dopo qualche secondo, il service viene riavviato automaticamente.

quello che voglio invece è che il service non venga chiuso alla chiusura dell'activity e che giri sempre in background. voglio che il service termini solo quando riapro l'app e clicco sul pulsante arresta... non so se sono stato chiaro..

Offline tonno16

  • Utente storico
  • *****
  • Post: 1197
  • Respect: +58
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:service sempre attivo in background. come si fa?
« Risposta #3 il: 23 Maggio 2014, 10:59:01 CEST »
0
Ciao. Prego :)

Quando tu killi l'app o comunque apri 34 giochi e quindi android decide di terminare l'app, il servizio viene killato. E se hai impostato start_sticky o altri parametri esso viene rilanciato dopo qualche secondo.
Cosi dovrebbe fare. Se in impostazioni->applicazioni->in uso.....compare il servizio creato col nome da te dato, allora tutto funziona correttamente.

Codice (Java): [Seleziona]
private boolean isMyServiceRunning() {
            ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
            for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
                if ("com.smsvoicenotice.MyService".equals(service.service.getClassName())) {
                    return true;
                }
            }
            return false;
        }

cosi facendo questo metodo da true se il servizio è attivo.
esempio: riapri l'app e esegui il metodo. se true metti un checkbox spuntato se false lo metti senza spunta.
quando vuoi terminare il service dalla tua activity fai stopService(intent);

Offline specialdo

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg Optimus One
  • Sistema operativo:
    Mac OS X 10.6.8
Re:service sempre attivo in background. come si fa?
« Risposta #4 il: 23 Maggio 2014, 13:35:11 CEST »
0
Ciao. Prego :)

Quando tu killi l'app o comunque apri 34 giochi e quindi android decide di terminare l'app, il servizio viene killato. E se hai impostato start_sticky o altri parametri esso viene rilanciato dopo qualche secondo.
Cosi dovrebbe fare. Se in impostazioni->applicazioni->in uso.....compare il servizio creato col nome da te dato, allora tutto funziona correttamente.

Codice (Java): [Seleziona]
private boolean isMyServiceRunning() {
            ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
            for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
                if ("com.smsvoicenotice.MyService".equals(service.service.getClassName())) {
                    return true;
                }
            }
            return false;
        }

cosi facendo questo metodo da true se il servizio è attivo.
esempio: riapri l'app e esegui il metodo. se true metti un checkbox spuntato se false lo metti senza spunta.
quando vuoi terminare il service dalla tua activity fai stopService(intent);

cavolo che sfiga!! e non posso far partire il service in un altro processo di modo che quando l'utente chiude l'app, il service rimane sempre attivo? un pò come fa facebook o whatsapp ... poi quando riapro l'app e clicco su arresta, stoppo il service come mi hai suggerito tu guardando il package. scusa se insisto eh, ma forse mi sfugge qualcosa che non sto riuscendo a capire.


Offline tonno16

  • Utente storico
  • *****
  • Post: 1197
  • Respect: +58
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:service sempre attivo in background. come si fa?
« Risposta #5 il: 23 Maggio 2014, 13:51:01 CEST »
0
non hai capito. Se te killy l'app, il servizio viene killato. Però riparte da solo senza che tu riapri l'app.

Non capisco il tuo problema

Offline specialdo

  • Nuovo arrivato
  • *
  • Post: 20
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Lg Optimus One
  • Sistema operativo:
    Mac OS X 10.6.8
Re:service sempre attivo in background. come si fa?
« Risposta #6 il: 23 Maggio 2014, 16:58:55 CEST »
0
non hai capito. Se te killy l'app, il servizio viene killato. Però riparte da solo senza che tu riapri l'app.

Non capisco il tuo problema

è quello che mi succede. io voglio che il servizio non venga killato e poi fatto ripartire in automatico ma che resti cmq attivo anche se viene killata l'app. si può fare?

Offline tonno16

  • Utente storico
  • *****
  • Post: 1197
  • Respect: +58
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:service sempre attivo in background. come si fa?
« Risposta #7 il: 23 Maggio 2014, 17:04:39 CEST »
0
Ho usato i service 4 volte nel mio piccolo. E se non ho capito male android lo killa e poi riparte. Magari c'è un modo che fa al caso tuo ma io non ne ho mai visto o sentito parlarne. Che esigenza hai esattamente? Descrivi cosa vuoi fare

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:service sempre attivo in background. come si fa?
« Risposta #8 il: 23 Maggio 2014, 17:07:20 CEST »
0
è quello che mi succede. io voglio che il servizio non venga killato e poi fatto ripartire in automatico ma che resti cmq attivo anche se viene killata l'app. si può fare?

No non si può.

Quando stabilisci che un service deve rimanere permanentemente attivo, quello che ti viene garantito è che sia ricreato ogni volta che viene killato. Tocca a te gestire il riavvio, con inizializzazione e tutto il resto.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

iClaude

  • Visitatore
Re:service sempre attivo in background. come si fa?
« Risposta #9 il: 27 Maggio 2014, 10:53:10 CEST »
0
Se cerchi nel forum c'è già una risposta alla stessa domanda: devi usare i metodi startForeground e stopForeground all'interno del Service. In questo modo il Service è considerato come processo in foreground e resta attivo anche se l'app viene killata, a meno che il sistema non abbia bisogno di ulteriore memoria.

Post unito: [time]27 Maggio 2014, 10:56:00 CEST[/time]
è quello che mi succede. io voglio che il servizio non venga killato e poi fatto ripartire in automatico ma che resti cmq attivo anche se viene killata l'app. si può fare?

Scusate, nel msg precedente ho citato l'utente sbagliato. Volevo rispondere a specialdo...
« Ultima modifica: 27 Maggio 2014, 10:57:05 CEST da iClaude »