Logcat – Android Development Notes: Unser Entwickler-Blog für Österreich
Wenn wir an unseren Schreibtischen in Wien sitzen und eine App partout nicht das macht, was sie soll, starren wir oft minutenlang auf den Bildschirm. Der rettende Anker in diesem digitalen Sturm ist fast immer der Logcat – das Protokollierungstool, das uns Android-Entwicklern den Puls unserer App zeigt. Genau deshalb heißt unser Blog so. Wir sind ein Team von leidenschaftlichen Entwicklerinnen und Entwicklern aus Österreich und haben beschlossen, unsere internen Notizen nicht länger in digitalen Schubladen verstauben zu lassen. Hier teilen wir unser Wissen, unsere Fehler und unsere Aha-Momente rund um die Android-Entwicklung – auf gutem, ehrlichem Österreichisch.
Android ListView: Effiziente Listen für jede App
Die Darstellung von Listen ist eine der häufigsten Aufgaben in der App-Entwicklung. Ob simple Einkaufsliste oder komplexe Nachrichtenübersicht, der Android ListView war lange unser Brot-und-Butter-Werkzeug. Wir zeigen euch, wie wir damit dynamische Listen umsetzen und die typischen Performance-Fallen umgehen, die uns in der Vergangenheit so manches Kopfzerbrechen bereitet haben. Unsere Tests liefen unter anderem auf einem Samsung Galaxy S23, um das Verhalten auf moderner High-End-Hardware zu validieren. Der ListView ist im Kern ein ViewGroup, der eine scrollbare Liste von Elementen anzeigt. Die Daten kommen aus einem Adapter, der als Brücke zwischen Datenquelle und Darstellung fungiert. Der größte Lernschritt war zu verstehen, dass der ListView die Views seiner Kind-Elemente recycelt – ein geniales Konzept, um Speicher zu sparen, aber auch die Wurzel vieler Bugs, wenn man es nicht richtig versteht.
Der häufigste Performance-Killer ist das ständige Aufrufen von findViewById(). Das ViewHolder-Pattern ist die elegante Lösung: Ein kleines Objekt speichert die Referenzen auf die Views eines Listeneintrags und wird per Tag-Mechanismus an die View geheftet. Unser Team konnte damit die Scroll-Geschwindigkeit selbst bei tausenden Einträgen butterweich halten. In unserem Praxisbeispiel – einer Einkaufsliste für Wiener Märkte wie den Naschmarkt oder Brunnenmarkt – haben wir einen Custom Adapter mit ViewHolder-Pattern implementiert, der Marktstände sogar nach Bezirken gruppiert. Ein wichtiges Learning: Zustände wie den Checked-Status einer Checkbox unbedingt im Datenmodell speichern, nicht in der View, da die Views wiederverwendet werden.
LinearLayout und RelativeLayout: Das richtige Layout wählen
Die Frage “LinearLayout oder RelativeLayout?” hat in unserem Team früher oft für hitzige Diskussionen gesorgt. Beide Layout-Typen haben ihre Daseinsberechtigung, aber wir sind heute der Meinung, dass die Frage oft falsch gestellt ist. Das LinearLayout ordnet seine Kinder entweder horizontal oder vertikal an – intuitiv, schnell implementiert und performant, solange man es nicht zu tief verschachtelt. Das RelativeLayout erlaubt es, Kind-Elemente in Beziehung zueinander oder zum Elternteil zu positionieren, erkauft sich diese Flexibilität aber mit schlechterer Performance. In der Praxis haben wir die Erfahrung gemacht, dass tief verschachtelte LinearLayouts oft performanter sind als ein flaches, aber komplexes RelativeLayout.
Seit der Einführung des ConstraintLayout hat sich die Diskussion für uns weitgehend erledigt. Es vereint die Einfachheit des LinearLayout mit der Flexibilität des RelativeLayout – bei exzellenter Performance. Für eine App mit der Komplexität der ÖBB Scotty App mit ihren Fahrplanansichten und Live-Karten wäre das ConstraintLayout heute unsere absolute Empfehlung. Stellt euch eine Wetter-App für alle österreichischen Bundesländer vor: Mit ConstraintLayout und unterschiedlichen Layout-Dateien für verschiedene Bildschirmgrößen lässt sich das responsive Design elegant lösen – vertikale Anordnung am Smartphone, zweispaltige Darstellung für West- und Ostösterreich am Tablet.
AsyncTask: Hintergrundprozesse in Android meistern
Es gab eine Zeit, da war AsyncTask unser treuester Begleiter für schnelle Hintergrundaufgaben wie einen einfachen API-Call. Die Klasse erlaubte es, Operationen im Hintergrund-Thread auszuführen und das Ergebnis im UI-Thread zu veröffentlichen, ohne sich direkt mit Threads und Handlern herumschlagen zu müssen. Doch die Zeiten ändern sich: AsyncTask ist heute offiziell deprecated. Der größte Fallstrick war der Lebenszyklus einer Activity. Wurde die Activity durch eine Bildschirmrotation zerstört, während ein AsyncTask noch lief, hielt dieser eine Referenz auf die alte Activity – das führte zu Speicherlecks und Abstürzen. Bei unserer Analyse der A1 Telekom Austria App fielen uns genau diese Muster auf, die zu sporadischen, schwer reproduzierbaren Bugs führten.
Für uns führt heute kein Weg mehr an Kotlin Coroutines vorbei. Sie sind das moderne, leichtgewichtige und von Google empfohlene Mittel für asynchrone Programmierung. Ein alter AsyncTask wird durch eine Coroutine ersetzt, die im viewModelScope oder lifecycleScope gestartet wird. Damit ist das Lebenszyklus-Problem automatisch gelöst, und der Code wird nicht nur sicherer, sondern auch viel lesbarer – aus einem verschachtelten Callback-Konstrukt wird ein linearer, verständlicher Code-Block.
Android Tutorial: Lernen mit unserem Team
Unser Android Tutorial-Angebot ist das Herzstück von Logcat. Es richtet sich an alle, die in Österreich Android-Entwicklung lernen oder sich verbessern wollen – vom kompletten Neuling bis zum fortgeschrittenen Profi. Für absolute Einsteiger beginnen wir mit der Installation von Android Studio und dem Aufsetzen des ersten Projekts. Gemeinsam bauen wir eine simple “Hallo Österreich”-App, die den Namen des Benutzers entgegennimmt und einen landestypischen Gruß ausgibt. Sobald die Grundlagen sitzen, tauchen wir in komplexere Themen wie Dependency Injection mit Hilt ein. In unseren fortgeschrittenen Tutorials, entwickelt auf Basis unserer Workshops mit Firmen wie Frequentis und der Erste Group, zeigen wir, wie man Hilt in eine Multi-Modul-App integriert und ein sauberes, testbares App-Fundament aufbaut.
Lernen passiert nicht nur am Bildschirm, sondern vor allem im Austausch mit Gleichgesinnten. Deshalb organisieren und unterstützen wir regelmäßig Meetups in Wien, Graz und Linz – eine großartige Gelegenheit, um sich über neue Technologien auszutauschen, knifflige Bugs gemeinsam zu lösen oder einfach bei einem Getränk über die neuesten Entwicklungen in der Android-Welt zu fachsimpeln. Schaut vorbei, wir freuen uns auf neue Gesichter!
Zusammenfassend ist Logcat mehr als nur ein Blog. Es ist unser Versuch, die Erfahrungen und das Wissen, das wir in unzähligen Stunden vor flackernden Bildschirmen gesammelt haben, an die österreichische Entwickler-Community zurückzugeben. Egal ob es um die Tücken des Android ListView, die Layout-Entscheidung zwischen LinearLayout und RelativeLayout oder die längst überfällige Migration von AsyncTask geht – wir wollen euch mit praxisnahen, ehrlichen Einblicken begleiten. Wir laden euch herzlich ein, mit uns zu diskutieren, eure eigenen Erfahrungen zu teilen und Teil unserer wachsenden Community zu werden.
Häufig gestellte Fragen
Für wen ist der Logcat-Blog gedacht?
Unser Blog richtet sich an alle Android-Entwicklerinnen und -Entwickler in Österreich, vom ambitionierten Einsteiger bis zum erfahrenen Senior Developer. Wir legen Wert auf österreichisches Standarddeutsch und Beispiele mit lokalem Bezug.
Warum verwendet ihr nicht einfach RecyclerView anstelle von ListView?
In unseren aktuellen Projekten setzen wir fast ausschließlich auf RecyclerView, da er flexibler und performanter ist. Wir behandeln den Android ListView aber ausführlich, weil er ein fundamentales Konzept ist und man ihm in vielen Legacy-Projekten noch begegnet.
Ist das ConstraintLayout immer die beste Wahl?
In den allermeisten Fällen: Ja. Für extrem simple Layouts kann ein einfaches LinearLayout manchmal ausreichend sein. Sobald aber eine gewisse Komplexität erreicht ist oder Responsivität gefragt ist, ist das ConstraintLayout unschlagbar.
Muss ich meine alten AsyncTasks sofort umschreiben?
Keine Panik. AsyncTask ist deprecated, aber euer Code funktioniert weiter. Schreibt nur keine neuen AsyncTasks mehr und migriert bei jedem Bugfix oder Feature-Update Stück für Stück auf Kotlin Coroutines.
Bietet ihr auch firmeninterne Workshops an?
Ja, absolut. Wir haben bereits maßgeschneiderte Workshops für österreichische Unternehmen wie Frequentis und die Erste Group durchgeführt. Meldet euch einfach über unsere Kontaktseite, dann besprechen wir eure individuellen Anforderungen.