Android Service & Autostart

Auf dieser Seite haben wir ein Codebeispiel für Android, wie ein Background Service Dienst funktioniert. Das Hintergrund-Dienst ist wichtig, wenn die Android App im Hintergrund diverse Aktionen ausführen soll. Je nach Funktion müssen auch die dafür notwendigen Rechte in der Manifest hinzugefügt werden.
Android Background Service with Autostart

Funktionsprinzip vom Service

Ein Service ist für Hintergrundaktivitäten (Musik spielen, Datenübertragungen, Ortungsdienste usw.) gedacht. Diese Klasse läuft unabhängig vom User Interface. Es ist gut vergleichbar mit den Diensten unter Windows. Die Klasse muss auch weiterlaufen, wenn die App geschlossen wird oder abstürzt. Außerdem muss die Klasse über den Autostart direkt nach dem Booten von Android starten. Dazu gibt es eine eigene Klasse, die von Android aufgerufen wird, wenn der Bootvorgang abgeschlossen ist. Diese Klasse öffnet dann wiederum die Background-Klasse und startet diese. In der Service-Klasse gibt es ein Programm mit einem Task, der alle 10 Sekunden aufgerufen wird und eine Toast-Message ausgibt.

Zusatzinformation

Aufwendige Aufgaben (Datentransfer, Ortungen, Sensorzugriffe usw.) sollten jedoch nicht zu oft im Hintergrund aufgerufen werden, da sich das sehr stark auf den Energieverbrauch auswirken kann. Widgets werden unter Android standardmäßig nur alle 30 Minuten aktualisiert. Genau so sollte auch das Service nicht ständig Ressourcen nutzen, da die App dadurch sehr schnell unbeliebt werden kann. Am Ende des Artikels kann die gesamte App als Source-Code sowie als fertige APK heruntergeladen werden. Als alternative gibt es für Android auch den Alarm Manager, der eine Klasse ebenfalls in einem bestimmten Intervall aufrufen kann.
Manifest.xml: In der Manifest-Datei müssen die Rechte definiert werden, sowie der Receiver, der nach dem Bootvorgang ausgeführt wird, angegeben werden. Außerdem wird hier das Service deklariert.
<receiver
            android:enabled="true"
            android:name=".BootUpReceiver"
            android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
            <intent-filter>
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </receiver>
        <service android:enabled="true" android:name=".BackgroundService" />
BackgroundService.java: Diese Datei beinhaltet den Code, der über einen Handler alle 10 Sekunden ausgeführt wird. Hier wird lediglich eine Toast-Messsage erstellt.
 @Override
    public void onCreate() {
        handler = new Handler();
        runnable = new Runnable() {
            public void run() {
                Toast.makeText(context, "Service is working", Toast.LENGTH_LONG).show();
                handler.postDelayed(runnable, 10000);
            }
        };

        handler.postDelayed(runnable, 15000);
    }
BootUpReceiver.java: Diese Datei wird direkt nach dem Bootvorgang vom Betriebssystem aufrufen. Diese Klasse öffnet die zuvor gezeigte Background-Klasse.
public class BootUpReceiver extends BroadcastReceiver {

    @Override
    public void onReceive(Context context, Intent intent) {
        /***** For start Service  ****/
        Intent myIntent = new Intent(context, BackgroundService.class);
        context.startService(myIntent);
    }