Originariamente inviato da
shadowyviper
Mi hanno consigliato, per far rimanere attiva un'app in background, il service o l'alarm manager. Io sono piu' propenso per il primo, l'app ogni 10-15-20 secondi dovrà controllare un file on the net e vorrei sapere, visto ch è tanto che ci provo, come fare un Service appunto.
Non mi servono link a documentazioni, le ho lette e le comprendo, ma mi servono esempi, semplici, non incasinati
Solo gente che ci abbia lavorato per favore, so che volete aiutare
ma spesso se non si è esperti (=non si ha esperienza) si sbaglia.
Beh in ogni modo grazie per le risposte
Ciao.
Per cominciare devi creare una classe che estenda la classe Service, e implementare i metodi obbligatori, ovvero onCreate(), onDestroy(), onStart(Intent intent, int startId) - oltre che onBind() e onUnBind().
I primi tre metodi sono importanti per una buona implementazione di un alarm manager.
Il codice contenuto nel metodo onCreate() viene eseguito quando il servizio viene lanciato (di solito da una activity, con il comando startService(...) )
Quindi normalmente viene utilizzato per inizializzare l'alarm manager.
Ti faccio un esempio di una classe Service, chiamata ServizioSincronizzazione.class, in cui nel metodo onCreate viene creato un alarm manager che gira ogni 5 min, eseguendo il codice contenuto nel metodo onStart() (ora sono solo msg Toast, ma puoi metterci quel che vuoi):
codice:
public class ServizioSincronizzazione extends Service {
private Intent myIntent;
private PendingIntent pendingIntent;
private AlarmManager alarmManager;
private Calendar calendar;
public static final long DELAY_INTERVAL_SERVICE = 300; //es. 300 secondi = 5 minuti
//quando vengo allocato in memoria la prima volta, eseguo queste istruzioni
@Override
public void onCreate() {
super.onCreate();
myIntent = new Intent(this, ServizioSincronizzazione.class);
pendingIntent = PendingIntent.getService(this, 0, myIntent, 0);
alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 10);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), DELAY_INTERVAL_SERVICE*1000, pendingIntent);
Toast.makeText(this, "Servizio in Background: ServizioSincronizzazione.onCreate()", Toast.LENGTH_LONG).show();
}
@Override //ogni volta che giro eseguo questo codice
public void onStart(Intent intent, int startId){
super.onStart(intent, startId);
Toast.makeText(this, "Servizio in Background: ServizioSincronizzazione.onStart()", Toast.LENGTH_LONG).show();
}
@Override //quando muoio eseguo questo codice
public void onDestroy(){
super.onDestroy();
Toast.makeText(this, "Servizio in Background: ServizioSincronizzazione.onDestroy()", Toast.LENGTH_LONG).show();
}
@Override
public IBinder onBind(Intent intent) {
Toast.makeText(this, "Servizio in Background: ServizioSincronizzazione.onBind()", Toast.LENGTH_LONG).show();
return null;
}
@Override
public boolean onUnbind(Intent intent) {
Toast.makeText(this, "Servizio in Background: ServizioSincronizzazione.onUnbind()", Toast.LENGTH_LONG).show();
return super.onUnbind(intent);
}
}
Il servizio va avviato in una main class, quella che preferisci, con il comando:
codice:
startService(new Intent(this.getApplicationContext(), ServizioSincronizzazione.class));
ma la manipolazione del servizio è da manuale.
Rimango a disp, Ciao!