Autore Topic: Processo in background  (Letto 461 volte)

Offline Paolo_000

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
Processo in background
« il: 31 Maggio 2016, 09:53:04 CEST »
0
Ciao a tutti ragazzi, io ho creato un'applicazione con due button, start e stop. Quando clicco su start si avvia un processo che ho creato facendo l'overriding del methodo onHandleIntent. Quando chiudo l'applicazione dal menù delle app recenti il processo si stoppa, come faccio a farlo continuare? Deve stopparsi solo quando l'utente apre l'applicazione e clicca su stop.
La variabile static che sto usando per stoppare il processo è solo una cosa momentanea, era la soluzione più veloce che ho trovato per stopparlo, mi serve capire come far funzionare un processo in background anche ad app chiusa.

Codice (Java): [Seleziona]
public class BgService extends IntentService
{


    public BgService()
    {
        super("BgService");
    }


    @Override
    protected void onHandleIntent(Intent i)
    {
        int n=0;
        boolean a = MainActivity.stop;
        while(a == true)
        {
            a = MainActivity.stop;
            Log.i("Prova Service","Evento n " + n++);
            try {
                Thread.sleep(1000);
            }
            catch (InterruptedException e)
            { }
        }
    }

}

Offline tonno16

  • Utente storico
  • *****
  • Post: 1186
  • Respect: +57
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Processo in background
« Risposta #1 il: 31 Maggio 2016, 10:25:27 CEST »
0
Un intent service o meglio un service in generale viene killato se termini l'app. se il service in onStartCommand ritorna START_STICKY, allora esso si rigenera da solo una volta interrotto.

Se un service è già avviato e tu chiami startService, il metodo onCreate non viene chiamato, mentre onStartCommand invece si. Puoi passargli un intent. In pratica puoi metterci un extra dentro l' intent, dove se il valore della chiave "xxx" = 1 allora avvi il timer, se = 0 allora lo stoppi

Offline Paolo_000

  • Nuovo arrivato
  • *
  • Post: 2
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
Re:Processo in background
« Risposta #2 il: 31 Maggio 2016, 18:02:14 CEST »
0
Non mi è ben chiaro  :-\.
Da quello che ho capito il metodo onStartCommand(Intent intent, int flags, int startId) viene chiamato dal sistema ogni volta che viene chiamato startService(Intent). Io chiamo startService in questo modo:
Codice (Java): [Seleziona]
public void startService(View v)
    {
        stop = true;
        startService(new Intent(this,BgService.class));
    }
Per far sì che onStartCommand mi ritorni START_STICKY devo fare l'overriding di questo metodo? Nel caso in cui la risposta sia affermativa non andrebbe in contrasto con la documentazione di google?
Citazione
Do not call this method directly.
https://developer.android.com/reference/android/app/Service.html#onStartCommand(android.content.Intent, int, int)

Se tutto quello che ho detto è sbagliato, come faccio a farmi ritornare START_STICKY?