Скачать книгу

den Bildschirmen von Tablets haben Sie hingegen massig Platz. Hier ist es nicht nur sinnvoll, Benutzern eine Aufgabenliste auf dem Bildschirm anzuzeigen und sie diese auf derselben Seite bearbeiten zu lassen, es würde vielmehr sogar recht umständlich wirken, wenn man anders vorgehen würde. Die Bildschirme der meisten Tablets bieten einfach zu viel Platz, um sie mit einzelnen langen Listen oder einer Menge Leerraum zu füllen.

      Unter Android lassen sich zwei Activities nicht so einfach gleichzeitig auf den Bildschirm bringen. Was also ist zu tun? Fragmente sind die Lösung.

      Wenn Sie Fragmente benutzen, kann eine Liste die eine Hälfte des Bildschirms belegen, während der Bearbeitungsbereich die andere Hälfte benutzt. Wie Sie Fragmente in Ihrer Smartphoneanwendung nutzen können, werden Sie in Kapitel 9 erfahren. Wie Sie bei der Skalierung Ihrer App für Tablets vorgehen können, erfahren Sie dann in Kapitel 17.

      Icon_Tipp.jpgFragmente können Sie sich als Mini-Activities vorstellen: Da alle Fragmente einen eigenen Lebenszyklus besitzen, wissen Sie unter anderem, wann sie erzeugt und zerstört werden. Fragmente werden in Aktivitäten eingebettet.

      Intents

       Intents bilden den Kern des Nachrichtensystems von Android. Intents bestehen aus zwei Elementen:

      ✔ Einer Aktion. Die allgemeine Aufgabe (Anzeigen, Bearbeiten, Wählen und so weiter), die nach dem Empfang eines Intents ausgeführt werden soll.

      ✔ Daten. Die Daten, die von einer Aktion verarbeitet werden sollen, wie beispielsweise der Name eines Kontakts.

      Intents werden zum Starten von Aktivitäten und für die Kommunikation zwischen den verschiedenen Teilen des Android-Systems genutzt. Applikationen können Intents senden und empfangen.

Messages mit Intents versenden

      Wenn Sie einen Intent senden, handelt es sich dabei um eine Message (Systemnachricht), die Android mitteilt, dass es etwas geschehen lassen soll. Ein Intent könnte Android aus Ihrer App heraus zum Starten einer neuen Activity oder einer anderen App bewegen.

Intent-Filter registrieren

      Nur weil Sie einen Intent versenden, muss noch lange nicht automatisch etwas passieren. Sie müssen einen Intent-Filter registrieren, der auf die Intents wartet und Android dann mitteilt, was es tun soll und ob die Task eine neue Activity oder eine andere App starten will. Wenn mehrere Empfänger (Receiver) mit einem bestimmten Intent etwas anzufangen wissen, kann ein Chooser (Auswahlmenü) erstellt werden, über den der Anwender entscheiden kann, mit welcher App eine Activity weiterverarbeitet werden soll. Ein Beispiel dafür ist die YouTube-App, die den Anwender entscheiden lässt, ob er Videos in der YouTube-App oder in einem Browser anzeigen will.

Verschiedene registrierte Receiver wie beispielsweise die Gmail- oder Hangouts-Apps wissen standardmäßig, was mit Intents zum Teilen von Bildern zu tun ist. Wenn es mehrere mögliche Intent-Filter gibt, wird dem Anwender ein Auswahlmenü angezeigt, in dem er gefragt wird, wie weiter vorgegangen werden soll: das E-Mail-Messaging verwenden oder eine andere Applikation, wie in Abbildung 1.1 gezeigt.

Abbildung 1.1: Ein Auswahlmenü (Chooser)

       Icon_Warnung.jpgWenn das Android-System keinen passenden Empfänger für einen gesendeten Intent findet und manuell kein Chooser erzeugt wurde, stürzt die App zur Laufzeit mit einem Ausnahmefehler (run-time exception) ab und es kommt zu einem nicht behebbaren Fehler in der App. Android erwartet von Entwicklern, dass sie wissen, was sie tun. Weitere Informationen über die Verwendung von Intent-Choosern finden Sie unter http://d.android.com/training/basics/intents/sending.html.

      Cursorlose Steuerelemente

      Anders als beim PC, bei dem Sie einen Zeiger mit der Maus über den Bildschirm schubsen, ersetzen Ihre Finger bei Android-Geräten nahezu alle Funktionen einer Maus. Und was ist mit dem Rechtsklick? Bei Android wird der Rechtsklick durch den Langdruck ersetzt. Wenn Sie Ihren Finger über längere Zeit hinweg auf eine Schaltfläche (auch Knopf für Linux-Anwender), ein Symbol oder den Bildschirm legen, wird ein Kontextmenü angezeigt.

      Als Entwickler können Sie Kontextmenüs erstellen und ändern. Zudem können Sie bei Android-Geräten beispielsweise zwei Finger anstelle nur eines Mauszeigers verwenden. Denken Sie aber daran, dass Finger unterschiedlich groß sind, und entwerfen Sie Ihre Benutzeroberflächen entsprechend. Die Schaltflächen sollten groß genug sein und ausreichend Abstand untereinander haben, damit selbst Anwender mit riesigen Pranken Ihre Apps auf kleinen Smartphones und Tablets leicht bedienen können.

      Views

      Was ist denn das nun schon wieder? Bei einer View handelt es sich um ein Grundelement der Android-Benutzeroberfläche, einen rechteckigen Bereich auf dem Bildschirm, der Objekte anzeigt und Ereignisse verarbeitet. Views sind also grundlegende Bausteine von Android-Benutzeroberflächen, ganz ähnlich wie Absatz- oder Anker-Tags (<p> und <a>) Bausteine einer HTML-Seite sind. Einige Beispiele für Views, die in Android-Apps verwendet werden können, sind TextView, ImageView, Layout und Button, es gibt jedoch noch unzählige andere, die Sie auch unbedingt kennenlernen sollten. Und Sie können auch Ihre eigenen, benutzerdefinierten Views implementieren.

      Es gibt also noch viel mehr Views, die auf Sie warten. Einzelheiten dazu finden Sie bei den Paketen android.widget und android.view in der Android-Dokumentation unter http://developer.android.com/reference/packages.html.

      Hintergrundoperationen

      In Android gibt es verschiedene Möglichkeiten, mehrere Operationen gleichzeitig ausführen zu lassen, ohne selbst Threads verwalten zu müssen (was jedoch generell nicht zu empfehlen ist). Wenn Sie Daten aus einer Datenbank laden, um diese auf dem Bildschirm anzuzeigen, verwenden Sie im Allgemeinen Loader. Loader übernehmen die Verwaltung der Hintergrund-Threads für Sie und überwachen außerdem Ihre Datenbank auf Änderungen, sodass Ihre Benutzeroberfläche aktualisiert wird, sobald sich Daten ändern. Weitere Informationen über Loader finden Sie in Kapitel 13.

      Für andere Hintergrundoperationen könnten Sie beispielsweise die Klasse AsyncTask verwenden, um eine Operation als Hintergrund-Thread auszuführen. Mit AsyncTask können Sie einen Task im Hintergrund starten und sein Ergebnis an Ihren Vordergrund-Thread weitergeben, sodass Sie Ihre Benutzeroberfläche aktualisieren können. Damit erhalten Sie ein sauberes Programmiermodell für die asynchrone Verarbeitung.

       Icon_Hand.jpgMithilfe von Threads können Sie auf einem Gerät mehrere Anweisungsmengen gleichzeitig ausführen. Sie verwenden alle denselben Speicher und dieselbe CPU, aber wenn ein Thread unterbrochen wird, weil er beispielsweise auf etwas anderes wartet, können andere Threads fortgesetzt werden, damit die CPU immer etwas zu tun hat.

      Die asynchrone Verarbeitung sollten Sie für Tasks nutzen, deren Ausführung länger als nur ein paar Sekundenbruchteile dauert, also beispielsweise für die Netzwerkkommunikation (Internet) oder das Lesen/Schreiben von Daten auf Speichermedien. Wenn die Anwender auf die Ergebnisse Ihres Tasks warten müssen, sollten Sie einen asynchronen Aufruf und ein Element auf der Benutzeroberfläche verwenden, um ihnen mitzuteilen, dass gerade irgendetwas passiert.

Icon_Warnung.jpgWenn Sie kein asynchrones Programmiermodell nutzen, könnten Anwender Ihre App (berechtigterweise) für fehlerhaft halten. Es dauert beispielsweise ein wenig, die neuesten Twitter-Mitteilungen aus dem Internet herunterzuladen. Wenn das Netzwerk stark ausgelastet ist und Ihre App nicht asynchron arbeitet, hängt sie scheinbar und reagiert nicht mehr auf Eingaben,

Скачать книгу