Android Programme verstehen

Für den Anfang möchte ich etwas über die Grundlagen der Android Entwicklung schreiben. Diese unterscheiden sich nämlich sehr stark von der klassischen Struktur (eigenständiges, ausführbares Programm, das im idealfall unabhängig vom Betriebssystem ist).

Bevor man mit der Programmierung loslegt, sollte man wissen, dass Android Programme nicht eigenständig sind. Sie sind lediglig Subklassen von bereits vorhandenen Android Klassen, die diese um gewünschte Funktionen erfweitern. Durch die Ableitung von bereits vorhandene Klassen und Einhaltung, bzw. Implementierung der Android API, können diese Klassen von Android zur Laufzeit geladen und instanziert werden. Nichts anderes geschieht beim Start eines “Apps” aus dem Android Launcher.

Basierend auf diesem Wissen stellt sich natürlich sofort die Frage, welche Basisklassen man ableiten muss um überhaupt ein “Hello World” mit einigen Menüs und Fenstern herbeizuzaubern. Hierzu muss man zuerst den Grundaufbau eines Android Apps versetehen.

Activity

Eine Activity ist der Grundstein einer interaktiven Anwendung. Diese beschreibt meistens ein einzelnes Fenster (eigentlich ein Screen, aber Fenster ist leichter zu verstehen), das bestimmte Steuerelemente anzeigt. Jede Activity muss von der Basisklasse Activity abgeleitet sein und zumindest die Methode onCreate überschreiben. Eine Activity kann man (wenn auch sehr abstrakt) mit einem Windows Formular vergleichen. Sie kann verschiedene Steuerelemente haben, ein Menü, usw.

Begriffserklärung: Activity ist eine Interaktion mit dem Benutzer, also eine Benutzer-”Aktivität”, daher der Name “Activity”. Dies war für mich persönlich etwas verwirrend, da man sofort an Programmaktivität und nicht an den Benutzer denkt, wenn man den Begriff liest.

Intent

Intents beschreiben Vorhaben, oder Absichten und sind Instanzen der Klasse Intent. Eine Aktivität wird immer mit einem Intent gestartet, das beschreibt was die Aktivität machen soll. Ein Intent hat immer eine Aktion und optional auch einen Datenverweis. Beispiel: “Starte”, oder “Offne Kontakt xy aus der Kontaktdatenbank”. Zusätzlich haben Intents eine Kategorie, die beischreibt in welchem Kontext die Aktion gestartet wurde (nicht mit der Context Klasse verwechseln).

Wird ein Programm, also eine Aktivität einfach aus dem Launcher gestartet, so wird der Aktion “MAIN” und der Kategorie “CATEGORY_LAUNCHER” zugewiesen. Die Aktivität kann diese Werte abfragen beispielsweise je nach Kontext Steuerelemente ein- oder ausblenden.

Intent Filter

Ein Intent Filter ist das Gegenstück vom Intent. Dieser beschreibt welche Intents eine Aktivität akzeptiert. Startet Android oder ein anderes Programm eine Aktivität mit einem Intent, so kann die zu startende Aktivität den Startversuch verweigern oder annehmen (in der Realität überprüft Android vor dem Start einer Aktivität. ob der Filter passt und startet diese ggf. erst garnicht).

Auf diese Weise lässt sich zum Beispiel auch kontrollieren, ob ein Programm (bzw. eine Aktivität) im Launcher von Android auftaucht. Wird ein Programm installiert, wertet Android die Filter der Aktivitäten des Programms aus. Ist die Aktion MAIN mit der Kategorie LAUNCHER vorhanden, so wird ein Icon im Launcher angelegt. Fehlt dieser Filter, taucht das Programm im Launcher garnicht erst auf.

Intent Receiver (Service/Dienst)

Möchte man ein Programm schreiben, das keine Interaktion mit dem Benutzer braucht und im Hintergrund läuft, so kann man einen Receiver verwenden. Hierzu leitet man die Basisklasse BroadcastReceiver ab und überschreibt die Methode onReceive. Genau wie eine Aktivität wird ein Receiver mit einem Intent gestartet. Man könnte beispielsweise ein Intent in bestimmten Zeitabständen erzeugen und den Receiver auf diesen reagieren lassen. Besonders sinnvoll ist das Ganze um Daten von bestimmten Ereignissen im Hintegrund zu sammeln oder in regelmässigen Abständen einen Server abzufragen.

Content Provider

Die meisten Programme müssen irgendwo ihre Daten ablegen. Dies kann mit Hilfe von Dateien oder Datenbanken geschehen. Android hat für diesen Zweck SQLite mit an Bord. Man kann Daten entweder direkt in einer SQLite Datenbank speichern, oder den Content Provider verwenden. Der Content Provider ist dabei ein gemeinsamer Speicher (Datenbank), auf den alle Android Programme zugreifen können. So ist auch der Zugriff auf die Kontakte, oder Termine über den Content Provider möglich. Möchte man den Zugriff auf das eigene Programm einschränken, so kann man eine eigene Datenbank anlegen.

Die SQLite Datenbanken vereinfachen die Datenverwaltung enorm. Allerdings kann es auch sinnvoll sein, direkt auf das Dateisystem zugreifen zu können. Es ist natürlich auch möglich strukturierte XML Dateien zu erstellen und diese auf der Speicherkarte zu speichern, oder man generiert Benärdateien. Hier sind keine Grenzen gesetzt.

  1. Noch keine Kommentare vorhanden.

  1. Noch keine TrackBacks.