Apps für Android programmieren leicht gemacht!
Hintergrundprozess erstellen

Hintergrundprozess erstellen

In einem vorangegangenem Artikel haben wir geklärt, wie wir unsere App performanter machen. In eben diesem Artikel habe ich angesprochen, dass man versuchen sollte rechenaufwändige Methoden in einen Hintergrundprozess zu verlagern. Da von einem Leser die Frage aufkam, wie man Hintergrundprozesse erstellt, liefer ich nun den entsprechenden Artikel nach.

Hintergrundprozesse oder auch Background Threads verlaufen Asynchron zur eigentlichen App. Was bedeutet, dass wir vermeiden, dass sich die App bei rechenaufwendigen Operationen aufhängt oder einfriert. Zu beachten ist allerdings, dass wir aus einem Background Thread keine Änderungen am Aussehen (der GUI) der App machen können. Grund hierfür ist, dass der Hintergrundprozess genau dann zum Ende gekommen sein kann, wenn die App bereits das Aussehen geändert hat. Es kann also passieren, dass wir aus einem Hintergrundprozess heraus einen Text in ein Textfeld setzen wollen, das garnicht mehr sichtbar ist.

Wie erstellen wir denn nun einen Hintergrundprozess?
Als erstes erstellen wir eine neue Klasse, welche allerdings in eine bestehende Klasse eingefügt wird. Wir behandeln die neue Klasse also wie eine normale Methode. Alternativ kann man auch eine neue Klassendatei mit dem selben Namen erstellen, aber das wäre ja langweilig. 😛

private class Hintergrundprozess extends AsyncTask<String, int, String> {
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }
    protected Bitmap doInBackground(String... args) {
        String ruckgabe = "test";

        // Hier können wir Berechnungen durchführen.

        return ruckgabe;
    }
    protected void onProgressUpdate(int prozent){
        // Hier kann man Änderungen am Aussehen der App vornehmen, um einen Fortschritt anzuzeigen.
    }
    protected void onPostExecute(String ruckgabe) { 
        // Hier können wir dann etwas mit der Berechnung machen. 
        // "doInBackground" ruft nach Abschluss automatisch "onPostExecute" auf 
    } 
}

Zur kurzen Erklärung:

  1. Wenn wir später den Hintergrundprozess starten, wird als erstes „onPreExecute“ ausgeführt.
  2. Kommt „onPreExecute“ zu einem Ende, dann wird „doInBackground“ gestartet.
  3. Kommt „doInBackground“ zu einem Ende, dann wird „onPostExecute“ gestartet.
  4. Kommt „onPostExecute“ zu einem Ende wird der Hintergrundprozess geschlossen. Innerhalb der normalen App (UI Thread) bekommen wir nichts davon mit.
  5. „onProcessUpdate“ wird immer dann aufgerufen, wenn wir innerhalb von „doInBackground“ die Funktion „publishProgress( Zahl )“ aufrufen.

Ist der Hintergrundprozess in „doInBackground“ beendet ist es uns möglich innerhalb der Funktion „onPostExecute“ eine Methode der normalen App (UI Thread) zu starten, welche wiederum eine Änderung am Aussehen der App (der GUI) vornimmt.

 

Kommen wir nun zum Aufruf des Hintergrundprozesses.

new Hintergrundprozess().execute(string1, string2, string3);

Wir können hier variabel viele Strings an den Hintergrundprozess übergeben, da wir in der Klasse geschrieben haben: „doInBackground(String… args)“ (Man achte auf die drei Punkte; Die Punkte sind gewollt).

 

Übrigens:
Bei „AsyncTask<String, Int, String>“ ist die Abfolge von „String, Int, String“ wie folgt zu erklären.
Das erste String ist die Übergabe der variabel vielen Parameter, beim Aufruf des Hintergrundprozesses.
Das Int steht für den Datentyp, der an „onProcessUpdate“ übergeben wird.
Das letzte String geht aus dem Datentyp, der an „onPostExecute“ übergeben wird, hervor.

Marvin

Ich bin 23 Jahre jung und studiere zurzeit Wirtschaftsinformatik an der Georg-August-Universität in Göttingen. Ich bin ein Mensch, der sich neben der Programmierung noch für tausend andere Dinge interessiert, die mal mehr und mal weniger verrückt sind. Vor allem aber bin ich Feuer und Flamme mit der Programmierung von eigenen kleinen Apps und Programmen, die mein Leben bereichern.

Kommentar hinzufügen

*Pflichtfeld