Autore Topic: Activity e Service  (Letto 1637 volte)

Offline adri

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
Activity e Service
« il: 07 Febbraio 2012, 21:26:29 CET »
0
Come mi è stato consigliato in un altro topic ho realizzato un Service che mi esegue un operazione della mia applicazione lanciata da un activity. Ora quando lancio l'operazione dall'activity mi parte in background il service che fa quello che deve fare però mi rimane attiva l'activity padre bloccata....è possibile farla scomparire nel mentre il service fa il suo dovere?

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:Activity e Service
« Risposta #1 il: 07 Febbraio 2012, 23:55:33 CET »
0
L'Activity rimane bloccata perchè il Service non è un Thread.
Dipende da quello che vuoi fare...una activity sostanzialmente serve quando c'è l'interazione con l'utente...un service invece quando questa interazione non è necessaria.

Offline adri

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
Re:Activity e Service
« Risposta #2 il: 08 Febbraio 2012, 00:11:11 CET »
0
Ti spiego come ho organizzato le cose. Ho un'activity che tramite interfaccia grafica prende dei dati dall'utente e alla pressione di un bottone fa partire il service che fa diverse cose tra l'altro avviando diversi thread per il parallelismo. Al termine il service avvia un'altra activity che mi stampa il risultato. Ora io vorrei che dopo l'avvio del service la prima activity vada a riposo e non mi tenga lo schermo occupato. si può fare?

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Activity e Service
« Risposta #3 il: 08 Febbraio 2012, 00:20:09 CET »
0
Puoi farlo, dichiari il servizio :remote così rimane attivo anche se il processo che l'ha generato é stato killato. Dopo che fatto partire il servizio se é :remote puoi chiudere l'activity con finish(). Per quanto riguarda il servizio devi fare in modo che faccia partire un thread, il servizio da solo non fa niente.

Offline adri

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
Re:Activity e Service
« Risposta #4 il: 08 Febbraio 2012, 00:26:57 CET »
0
dove e come lo dichiaro remote? nel manifest?

Offline adri

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
Re:Activity e Service
« Risposta #5 il: 08 Febbraio 2012, 00:37:04 CET »
0
ho provato il tuo consiglio dichiarando il service :remote ma non va dopo qualche passaggio successivo alla chiusura dell'activity padre termina tutto.

Offline Oreste

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: +2
    • Mostra profilo
Activity e Service
« Risposta #6 il: 08 Febbraio 2012, 01:42:14 CET »
0
Come consigliato..metti il service in un thread e vai tranquillo ;)


Sent from my iPhone 4S using Tapatalk

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Activity e Service
« Risposta #7 il: 08 Febbraio 2012, 12:08:17 CET »
0
ho provato il tuo consiglio dichiarando il service :remote ma non va dopo qualche passaggio successivo alla chiusura dell'activity padre termina tutto.
Se non lo hai già fatto, nella onStart del servizio (nel caso non sia già attivo) prova a chiamare startForeground.
Se metti il servizio come foreground e il processo è :remote  la possibilità che esso venga terminato è molto remota.

Offline adri

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
Re:Activity e Service
« Risposta #8 il: 11 Febbraio 2012, 13:31:39 CET »
0
Allora ragazzi invece di fare un Service ho creato un thread. Cioè la activity ora crea un'istanza di una classe derivata da thread e poi termina. Ora mi sembra che funzioni....vi chiedo è possibile che il SO mi tronchi il thread mentre esegue perchè l'activity che l'ha creato e lanciato è terminata? fino ad ora non mi è capitato!

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Activity e Service
« Risposta #9 il: 11 Febbraio 2012, 14:31:06 CET »
0
Allora ragazzi invece di fare un Service ho creato un thread. Cioè la activity ora crea un'istanza di una classe derivata da thread e poi termina. Ora mi sembra che funzioni....vi chiedo è possibile che il SO mi tronchi il thread mentre esegue perchè l'activity che l'ha creato e lanciato è terminata? fino ad ora non mi è capitato!
Può succedere che il telefono vada in sleep... e il tuo thread non venga più chiamato.

Offline adri

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
Re:Activity e Service
« Risposta #10 il: 11 Febbraio 2012, 15:07:32 CET »
0
me ne sono accorto ora...il telefono va in sleep e il thread si interrope....però riprende non appena il telefono viene risvegliato....c'è un modo per farlo eseguire anche con il telefono in sleep?

Offline undead

  • Utente senior
  • ****
  • Post: 666
  • Respect: +113
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S6
  • Play Store ID:
    DrKappa
  • Sistema operativo:
    Windows 10 64-bit, Windows 8.1 64-bit
Re:Activity e Service
« Risposta #11 il: 11 Febbraio 2012, 15:09:59 CET »
0
me ne sono accorto ora...il telefono va in sleep e il thread si interrope....però riprende non appena il telefono viene risvegliato....c'è un modo per farlo eseguire anche con il telefono in sleep?
Devi usare l'alarmmanager e settare un allarme. Quando il telefono è in sleep le funzionalità disponibili sono poche, tra queste per fortuna c'è l'alarm manager.

AlarmManager | Android Developers

Offline adri

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
Re:Activity e Service
« Risposta #12 il: 11 Febbraio 2012, 15:45:02 CET »
0
E se io facessi così:
Activity lancia thread e termina;
tale thread lancia un service :remote che compie il suo lavoro ed intanto tale thread rimane in attesa;
così funzionerebbe oppure verrebbe interrotto anche il service?

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04

Offline adri

  • Utente junior
  • **
  • Post: 62
  • Respect: 0
    • Mostra profilo
Re:Activity e Service
« Risposta #14 il: 11 Febbraio 2012, 17:07:59 CET »
0
potrei avere un veloce esempio di come far partire un service in foreground?
io al momento nella mia applicazione ho:

//Activity
.....
ServiceThread st = new ServiceThread(...);
st.start();
finish();

//metodo run di ServiceThread
startService(new Intent(this, MyService.class));

Poi nella OnStart del service eseguo il servizio.
Potete dirmi dove e cosa inserire per fare in modo che questo service giri in foreground?
dalla guida non l'ho capito molto bene