Einführung in Android
22. Oktober 2014
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 39
Was ist Android?
Software für mobile Geräte: Betriebssystem Middleware Kernanwendungen
Android SDK: Tools und APIs zur Entwicklung von Anwendungen auf der
Android-Plattform URL für Entwickler: developer.android.com
Open Source Software
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 40
Android Architektur
developer.android.com
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 41
Bibliotheken, Runtime und Kernel
Android enthält eine Reihe von C/C++-Bibliotheken. z.B. SGL und 3D Librairies für 2D und 3D-Darstellungen z.B. SQLite als leichtgewichtiges relationales Datenbank-
system Android Runtime
Jede Android-Anwendung läuft in einem eigenen Prozess mit der sogenannten Dalvik Virtual Machine.
Die Dalvik VM basiert auf einem Linux Kernel. Linux Kernel
Android basiert auf der Linux Kernel Version 3.0.1 Der Kernel fungiert als Abstraktionsebene zwischen
Hardware und dem Rest des Software Stack.
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 42
Android Anwendungen Android enthält eine Reihe
von Kernanwendungen. Email -Client, SMS-
Programm, Kalender, Karten, Web-Browser, Kontakte, etc.
Alle Anwendungen sind in Java geschrieben.
Jede Anwendung hat ihre eigene Umgebung: eigener Linux-Prozess eigene Java-VM eindeutige Linux User Id
(kann auch von anderen Anwendungen genutzt werden)
developer.android.com
Der Android SDK Manager
Nach der Installation einer Eclipse-Version mit ADT (Android Developer Tools).
Zur Konfiguration von Android-Versionen, die zur Entwicklung benutzt werden. Start: Windows-> Android SDK
Manager Es können mehrere Versionen
ausgewählt werden.
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 43
Starten einer App im Emulator
Android Virtual Device (AVD) anlegen AVD Manager aufrufen mit Create ein neues
AVD anlegen
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 44
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 45
Application Framework
Views: graphische Komponenten zum Aufbau einer Anwendung, z.B. Listen, Textfelder, Knöpfe und auch ein einbettbarer Web-Browser
Content Providers: ermöglichen den Zugriff auf Daten, auch aus anderen Anwendungen
Resource Manager: Zugriff auch Resourcen, die nicht Code sind, z.B. Graphiken
Notification Manager: zur Benachrichtigung des Nutzers über Ereignisse
Activity Manager: organisiert den Lebenszyklus einer Anwendung
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 46
Application ComponentsAusführbare Anwendungsteile: Activities: visuelle Komponente
Beispiel: Liste von textuellen Kommentaren Eine Anwendung kann mehrere Activities haben, die sich
gegenseitig benutzen. Eine Activity ist als Start-Activity markiert. Jede Activity hat ein eigenes Fenster, in das sie zeichnet.
Services: nicht sichtbare Komponenten Beispiel: Ein Service, der Musik abspielt
Broadcast Receiver: hört auf Broadcast-Nachrichten Beispiel: Wechsel der Zeitzone, geringer Batteriestand, Aufnahme
eines Fotos, etc. Content Providers: veröffentlicht eine Menge von Daten für
andere Anwendungen Daten sind meist in einer SQLite-Datenbank gespeichert.
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 47
Die Android Manifest-DateiAndroidManifest.xml informiert Android über die Komponenten der Anwendung:
Start-Activity
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 48
Aktivieren von Komponenten durch Intents
Activities, Services und Broadcast Receivers werden durch asynchrone Nachrichten, sogenannte Intents, aktiviert.
Start einer Activity: Intent erzeugen:
Intent intent = new Intent(this, MyActivity.class)this – Kontextkomponente, von der der Intent erzeugt wird.MyActivity.class – Activity, die aktiviert werden soll
Start der Activity: c.startActivity(intent)c - Kontextkomponente
In der gestarteten Activity:getIntent() liefert den initialen Intent zurück.
Beenden einer Activity: selten, da in andauernder Kommunikation mit dem Nutzer finish() oder finishActivity()
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 49
Lebenszyklus einer Activity Eine Activity hat drei mögliche Zustände:
active oder running: auf dem Display zu sehen, Fokus der Ausführung
paused: sichtbar, aber hat nicht den Fokus. Eine andere Activity liegt darüber.
stopped: nicht sichtbar und ohne Fokus, der Zustand und die Daten werden solange gehalten, wie Speicher vorhanden
Zustandswechsel werden durch Methodenaufrufe mitgeteilt: void onCreate(Bundle savedInstanceState)
void onStart() void onRestart() void onResume() void onPause() void onStop() void onDestroy()
Alle Activities müssen onCreate() implementieren.
Diese Methoden sollten zuerst die entsprechende Supermethode aufrufen.
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 50
Lebenszyklus einer Activity onCreate(): das normale Setup, Bundle-Objekt übergibt den bisherigen
Zustand, danach direkt onStart() und onResume() onPause(): eine andere Activity wird aktiv, ungesicherte Daten werden
gespeichert onStop(): eine andere Activity wird sichtbar oder Activity wird zerstört,
onPause() wird immer vorher aufgerufen
developer.android.com
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 51
Benutzung von Activities
Activities können andere starten, auch wenn sie zu anderen Anwendungen gehören. Beispiel: Eine Activity, die einen Kartenausschnitt anzeigt,
kann in verschiedenen Anwendungen genutzt werden. Zur Nutzung einer Activity einer anderen Anwendung muss
nur ein passender Intent an diese Activity geschickt werden.
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 52
Layout graphischer Komponenten Layout-Definition durch
eine XML-Layout Datei. Jedes XML-Element ist
entweder ein View oder ein ViewGroup-Objekt.
Vordefinierte ViewGroup-Objekte: LinearLayout RelativeLayout AbsoluteLayout TableLayout etc.
Layout-Parameter: height, width vordefinierte Werte:
fillParent: füllt Platz des ParentView aus
wrap_content: umhüllt den Inhalt minimal
@+id/… verweist auf ids in der Datei R.java
create_counter.xml
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 53
Die Datei R.java
R.java wird aus den Inhalten im Ordner /res generiert und liegt unter /gen.
R.java soll nicht geändert werden. Sie enthält einen Index für alle Ressourcen der
Anwendung. Ressourcen sind z.B. Namen und Ids von graphischen
Elementen.
Diese Klasse kann als Abkürzung für die Referenzierung von Ressourcen genutzt werden.
Debuggen von Android Apps App in Emulator starten Breakpoints im Code setzen In DDMS Perspektive gehen App auf Debug setzen App im Emulator ausführen Zur Debug Perspektive
wechseln Schrittweise ausführen
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 54
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 55
Zusammenfassung
Android bietet einen Software-Stack für mobile Geräte, bestehend aus Betriebssystem, Middleware und Kernanwendungen
Android SDK bietet Tools und APIs zur Entwicklung von Anwendungen auf der Android-Plattform
Die graphischen Komponenten folgen einem vorgegebenen Zustandsautomaten. Dadurch behält der Benutzer die maximale Kontrolle über die Anwendungen.
Jede Anwendung läuft in einem eigenen Prozess mit eigener Virtual Machine.
Android-Vertiefung
22.Oktober 2014
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 57
Überblick Entwicklung der Benutzeroberfläche
Views Layouts Events Menüs Adapter
Entwicklung einer Zwei-Schichten-Architektur Entwicklungsrichtlinien
Best Practices: generelle und spezielle Richtlinien für mobile Geräte
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 58
Views
Views: graphische Komponenten in einer Activity, z.B. Listen, Textfelder, Knöpfe und auch ein einbettbarer Web-Browser
Definition der View-Hierarchie in der Layout-Datei der Activity
aus „android.com“
View-Hierarchie:
Zeichnen einer View
Zeichnen einer View durch Aufruf von setContentView() der enthaltenden Activity Parameter: Wurzel der View-Hierarchie
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 59
CreateCounter.java:
Verweis auf XML-Datei
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 60
Layout graphischer Komponentencreate_counter.xml
Layout-Definition durch eine XML-Layout Datei.
Jedes XML-Element ist entweder ein View oder ein ViewGroup-Objekt.
Layouts für ViewGroup-Objekte: LinearLayout RelativeLayout AbsoluteLayout TableLayout GridLayout etc.
Widget: View-Objekt für Benutzerinteraktion Z.B. Button, Checkbox,
Texteingabefeld, Uhr Interaktion über Events
Layout-Gruppen
Gruppieren mehrere Views zu einer ViewGroup. FrameLayout definiert einen leeren Rahmen, der
später durch ein Objekt gefüllt werden kann. LinearLayout bringt alle Kinder in eine Reihe. TableLayout positioniert seine Kinder in Zeilen und
Spalten. Die Tabelle wird durch eine Liste von TableRows aufgebaut. Einzelne Zellen können frei bleiben, aber nicht kombiniert werden.
RelativeLayout überlässt seinen Kinder das Layout. Sie positionieren sich relativ zueinander (links, rechts, über, unter).
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 61
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 62
Der Event-Mechanismus
Prinzipielle Idee: Views interagieren über Events miteinander und mit dem Benutzer.
Wenn ein View auf einen Typ von Events hören möchte, meldet er sich als Listener an.
Wenn das Event eintrifft, werden alle Listener benach-richtigt und jeweils eine Callback-Methode ausgeführt.
Views können bereits auf viele Typen von Events hören: z.B. View.onClickListener() View.onTouchListener() View.onKeyListener() Anmeldung des akt. View:
z.B. setOnClickListener() Überschreiben einer
Callback-Methode bei eigenen Views möglich, z.B.: onClick() onKeyDown()
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 63
Beispiel: Event HandlingCreateCounter.java:
Taentzer 64
Definition eines Menüs Drei Arten von Menüs:
OptionsMenu – durch Drücken von MENU
ContextMenu – ein Kontextmenü
PopupMenu – zum Anzeigen von Daten
Zur Definition von Menüs werden Callback-Methoden überschrieben: onCreateOptionsMenu() onOptionsItemSelected()
Menüeinträge können in einer Layout-Datei definiert werden.
Weitere View-Komponenten werden im Emulator unter ApiDemos erklärt.
Menü mit Icons
Modellgetriebene Entwicklung von mobilen Anwendungen
Weitere Menü-KonzepteCallback-Methoden:
onCreateOptionsMenu() – wird beim Erzeugen einer Activity aufgebaut
onPrepareOptionsMenu() – wird nach dem Drücken des Menu-Knopfs aufgerufen
onOptionsItemSelected() – wird bei Auswahl eines Menüeintrags aufgerufen und behandelt die möglichen Menüaktionen
onCreateContextMenu() - wird zum Erzeugen eines Kontextmenüs aufgerufen (anders als bei onCreatOptionsMenu)
onContextItemSelected() () – wird bei Auswahl eines Menüeintrags aufgerufen und behandelt die möglichen Menüaktionen
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 65
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 66
ListView als spezieller AdapterView
Ein ListView ist eine ViewGroup zur Darstellung von Aufzählungen
Die ListView ist ein AdapterView und braucht einen Adapter, um die Daten darzustellen.
Ein AdapterView ist an eine externe Datenquelle gebunden. Zwischen der ListView und der
Datenquelle fließt ein Adapter-Objekt.
Mit einem spezialisierten Array Adapter kann die Darstellung der Listeneinträge angepasst werden.
Beispiel: Ein ListView mit angepasstem Array-Adapter
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 67
Darzustellender Inhalt: Liste mit
ClickCounts
Darstellung eines Eintrags: Darstellung eines ClickCounts
Context: umgebene Activity: ClickConfig
ClickConfig.java:
Erstellung des ListView:
Beispiel: Benutzerauswahl behandeln
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 68
ClickConfig.onCreate():
Ausgewählter Eintrag
Callback-Methode, die nach einem Klick ausgeführt wird
view – der View, der geklickt wurdei - die Position des geklickten Eintragsl – die Id des geklickten Eintrags
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 69
Entwicklungsrichtlinien für effizienten Code
Performanz: Schreib keinen unnötigen
Programmcode! kein Code für alle
Eventualitäten Best Practices:
generelle Empfehlungen spezielle Empfehlungen für
mobile Anwendungen
Generelle Best Practices: Benutze Klassen und
Methoden, die schon im SDK vorhanden sind!
Deklariere Methoden, die keine Objektinformation brauchen, als statisch!
Deklariere Felder und Methoden als final, wenn sie nicht überschrieben werden!
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 70
Beispiele: Best Practices
Konstanten werden nicht überschrieben und sind von Objekten unabhängig:// Menu item ids
public static final int MENU_ITEM_DELETE = Menu.FIRST;public static final int MENU_ITEM_INSERT = Menu.FIRST + 1;
Methode zur Berechnung des Durchschnitts ist von Objekten unabhängig.public static double mean(int[] p) {
int sum = 0; // sum of all the elements for (int i=0; i<p.length; i++) {
sum += p[i]; } return ((double)sum) / p.length;
}
Aufruf:double averageAttendance =
MyUtils.mean(attendance);
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 71
Entwicklungsrichtlinien für effizienten Code (2)
Spezielle Best Practices für mobile Anwendungen: Erzeuge nicht mehr Objekte als
nötig! Verlier keine Daten!
onSaveInstanceState() onPause()
Überlade einzelne Seiten nicht! Entwirf die Benutzeroberfläche
so, dass die Anwendung auf verschiedenartigen Geräten laufen kann.
Nutze Netz und Strom wenig!
Generelle Best Practices: Vermeide doppelten Code!
keine Copy-and-Paste-Programmierung
Vermeide Spaghetti-Code! Vermeide temporäre Felder!
keine Zwischenergebnisse in Objektfeldern
Vermeide Klassen, die ihr Erbe verweigern! Alle geerbten Felder und
Methoden sollen auch in den Unterklassen sinnvoll sein.
Taentzer Modellgetriebene Entwicklung von mobilen Anwendungen 72
Zusammenfassung Activities enthalten Views.
Layout in XML-Datei möglichst relatives Layout Views hören auf Events vom Benutzer (Listener-Konzept)
AdapterViews: Sind an Datenquellen angeschlossen Können Daten durch spezielle Adapter speziell darstellen.
Zwei-Schichten-Architektur: Datenhaltung und Oberfläche: Die obere Schicht benutzt die
untere. Die untere Schicht schickt Notifications an die obere. Entwicklungsrichtlinien
generelle für guten Programmierstil spezielle für mobile Geräte, um Zeit und Platz zu sparen