2013-04-22 5 views
17

Ich muss eine Hintergrundaufgabe erstellen, die alle 10/15 Minuten ausgeführt wird (ist nicht wirklich wichtig, entweder ist gut), auch wenn die Anwendung ist nicht laufen.Android - Ausführen einer Hintergrundaufgabe alle 15 Minuten, auch wenn die Anwendung nicht ausgeführt wird

Wie kann ich das erreichen? Ich kann nicht scheinen, dass mein Kopf um diesen zu wickeln.

Ich habe gelesen, ich könnte eine Art von Runnable() -Funktion verwenden oder eine Hintergrunddienste oder AlarmManager verwenden. Ich habe an einen Hintergrunddienst gedacht, da dieser auch ausgeführt werden muss, wenn die Anwendung selbst nicht läuft.

Was ist ein besserer Weg dies zu tun und wie könnte ich es tun?

Antwort

22

Sie haben die Anzahl der Zeit (Intervall) bestimmt, um ein Code-Schnipsel auszuführen, es ist besser, AlarmManager zu verwenden, weil es mehr Energie effient. Wenn Ihre App eine Art von Ereignis anhören muss, ist der Dienst das, was Sie brauchen.

public static void registerAlarm(Context context) { 
    Intent i = new Intent(context, YOURBROADCASTRECIEVER.class); 

    PendingIntent sender = PendingIntent.getBroadcast(context,REQUEST_CODE, i, 0); 

    // We want the alarm to go off 3 seconds from now. 
    long firstTime = SystemClock.elapsedRealtime(); 
    firstTime += 3 * 1000;//start 3 seconds after first register. 

    // Schedule the alarm! 
    AlarmManager am = (AlarmManager) context 
      .getSystemService(ALARM_SERVICE); 
    am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime, 
      600000, sender);//10min interval 

} 
+1

Aber erlaubt dies mir Code auszuführen, auch wenn die Anwendung selbst nicht ausgeführt wird? – DijkeMark

+2

Ja. Alarm Manager ist wie, Sie (die App) sagt dem Betriebssystem, dass Sie etwas in X Millisekunden später tun möchten. Dann führt das System diesen Code in der BroadcastReciever.onRecieve() aus, dem Code, den Sie nach x Millisekunden im Hintergrund ausführen möchten. – wtsang02

+0

Es funktioniert, wirklich nett, aber was ist mit dem Service zu stoppen? am.cancel()? oder .. danke @ wtsang02 –

2

Alarmmanager (Systemdienst) vs. Remotedienst mit interner Alarmimplementierung (separater Prozess)?

Alarm Manager ist Ihre Wahl, weil es bereits hat, was Sie benötigen, können Sie nur Intervalle Alarm müssen

1

Sie können dies auch über eine SyncAdapter erreichen Hier ist ein Beispiel für die sehen und

inspirieren

SyncAdapter sample