Android-Architektur

„Android ist eine komplexe Plattform“

Kypriani Sinaris

Gabriel Weis und Simon Butscher

Eine der größten Stärken von Android ist sein Freiheitsgrad und die damit verbundenen, schier unbegrenzten Möglichkeiten. Gleichzeitig ist das eines der größten Probleme, weil es keine klaren Architekturvorgaben gibt. Welche Stolpersteine Entwickler erwarten können und wie sie am Ende trotzdem einen lesbaren, erweiterbaren und vor allem wartbaren Code erreichen, lesen Sie im Interview mit Gabriel Weis und Simon Butscher, Speaker bei der diesjährigen MobileTechCon.

JAXenter: Android ist eine unglaublich erfolgreiche Plattform, birgt für die professionelle Applikationsentwicklung aber auch einige Stolpersteine. Könnt ihr ein paar nennen?

Gabriel Weis, Simon Butscher: Android nutzt einen komplexen Lifecycle, der häufig zu unerwartetem Verhalten führt. Ein weiteres großes Thema ist Nebenläufigkeit. Um eine bestmögliche User Experience zu erreichen, sollte der Main Thread möglichst frei gehalten werden. Die Auswahl der richtigen Werkzeuge ist nicht immer einfach, die Trennung von Applikationslogik und asynchroner Ausführung ist essentiell.

Neben diversen Stolpersteinen auf SDK-Ebene gibt es einen weiteren Faktor, der bei der Android-Entwicklung häufig unterschätzt wird. Die große Vielfalt an Endgeräten, die durch Android bedient werden. Das ist ein großer Unterschied zu iOS. Dabei muss man nicht nur auf verschiedene Formfaktoren und Android-Versionen achten, sondern sich auch auf unterschiedliche Hersteller-spezifische Imkompatibilitäten einstellen. Automatisierte Tests werden in einer solchen Umgebung unerlässlich.

JAXenter: In eurer Session auf der MTC sprecht ihr unter anderem von den Context- und Activity-Klassen als negative Einflussfaktoren auf die Architektur – worin liegt das Problem?

Gabriel Weis, Simon Butscher: Das Context-Objekt ist in Android allgegenwärtig. Ohne entsprechende Vorkehrungen führt dies sehr schnell zu starker Kopplung zwischen Business-Logik und der Android-Plattform. In der Folge ist der Quellcode schwieriger zu testen.

Verschärft wird dieses Problem durch die Tatsache, dass Activity eine Subklasse von Context ist. So mutieren Activities häufig zu Gottklassen, die alles implementieren, von UI über Business Logik bis zu Sensor- und Netzwerkanbindung. Der Activity Lifecycle trägt dann sein Übriges zur Komplexität bei.

JAXenter: Ihr präsentiert eine Architektur auf der Basis des Model View Presenter Pattern, mit der u.a. eine bessere Testbarkeit des Codes erreicht werden soll. Könnt ihr kurz darstellen, wie die Komponenten in diesem Modell zusammenspielen?

Gabriel Weis, Simon Butscher: In unserem Modell werden Activities und Fragments zur passiven View degradiert. Sie sind nur noch zuständig für die Initialisierung der UI, der Dependency Injection sowie Bus-Registrierung. Jegliche UI-Logik wird über den Presenter an die Business-Schicht delegiert. Alle benötigen Daten werden vom Presenter über die Business-Schicht bezogen.

Durch diese Trennung erreicht man eine starke Kapselung der beteiligten Klassen. UI, Presenter und Business-Logik können getrennt voneinander getestet werden. Im Normalfall kann die Business-Logik sogar auf eine andere Plattform portiert werden, da diese keine Abhängigkeiten mehr zur Android-Plattform enthalten.

Mit der Verwendung von DI ist es einfach, Abhängigkeiten zu minimieren und in den Tests mit Mocks zu arbeiten. Es gibt jedoch auch Beispiele, welche eine saubere Trennung erschweren. Ein Spezialfall der Android-Plattform ist der CursorAdapter, welcher einen direkten Mix zwischen dem Adapter, der zur View gehört, und dem Cursor, der zum Datenlayer gehört, herstellt. In solchen Fällen ist Kreativität gefragt.

API Summit 2018
Christian Schwendtner

GraphQL – A query language for your API

mit Christian Schwendtner (PROGRAMMIERFABRIK)

DDD Summit 2018
Nicole Rauch

Domain-Driven Design für Einsteiger

mit Nicole Rauch (Softwareentwicklung und Entwicklungscoaching)

JAXenter: Welche Änderungen in der Android-Plattform bzw. im Android Lifecycle würdet ihr euch von Google wünschen?

Gabriel Weis, Simon Butscher: Der Android Lifecycle ist tief in der Plattform verwurzelt und lässt sich nur schwer vereinfachen. Wünschenswert wären bessere Beispiele in der Dokumentation, die nicht nur ein konkretes Problem lösen, sondern auch ein Augenmerk auf Testbarkeit und die geschickte Einbettung in eine Applikation legen. Seit der Verwendung von Fragments wurde die Testbarkeit noch weiter verschlechtert und der Lifecycle zudem komplizierter.

Mit der Einführung der Android Testing Support Library wurde ein großer Schritt hin zu mehr Qualität getan. Dieser Weg muss konsequent weiter verfolgt werden.

JAXenter: Könnt ihr den Leuten einen Tipp aus eurer persönlichen Trickkiste als Mobile-Entwickler verraten – (kann mit oder ohne Bezug auf deine Session sein)?

Gabriel Weis, Simon Butscher: Android ist eine komplexe Plattform. Mit einer passenden Architektur, einer sauberen Umsetzung, den richtigen 3rd-Party-Bibliotheken, automatisierten Tests und Dependency Injection kann man sich viel Ärger ersparen und der Code der App bleibt – auch längerfristig – lesbar, erweiterbar und wartbar.

569f6325dcb76c08727d9f9dversion15sizefullSimon M. Butscher ist Softwareentwickler bei der Schweizerische Bundesbahnen (SBB) AG in Bern. Er beschäftigt sich seit 2008 mit der mobilen Entwicklung. Zu Beginn entwickelte er Geschäftsanwendungen für die Plattformen Symbian und Windows CE. Seit 2010 liegt der Fokus voll auf der Android-Plattform. Simon arbeitet in Projekten eng mit den Auftraggebern zusammen, damit mobile Lösungen entwickelt werden können, welche die Geschäftsprozesse bestmöglich unterstützen. Denn neue Möglichkeiten mittels Informations- und Kommunikationstechnologien verändern das Kundenverhalten, die Geschäftsmodelle und ganze Wertschöpfungsketten.

5665b5ed729ae420206474eeversion49sizefullGabriel Weis (MSc) arbeitet seit über 10 Jahren als Software Ingenieur. Er ist seit den Anfängen Android Enthusiast. Er hat in vielen Projekten die Möglichkeiten der Platform ausgereizt und aussergewöhnliche Produkte entwickelt. Seine Passion ist das Schreiben von Clean Code. Er ist Gründer der Binosys GmbH und arbeitet darüber hinaus im Bereich eMobility Integration.

Geschrieben von
Kypriani Sinaris
Kypriani Sinaris
Kypriani Sinaris studierte Kognitive Linguistik an der Goethe Universität Frankfurt am Main. Seit 2015 ist sie Redakteurin bei JAXenter und dem Java Magazin.
Kommentare

Hinterlasse einen Kommentar

1 Kommentar auf "„Android ist eine komplexe Plattform“"

avatar
400
  Subscribe  
Benachrichtige mich zu:
trackback

[…] Read our interview about Android at: https://jaxenter.de/android-ist-eine-komplexe-plattform-34922 […]