Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Android-Entwicklung mit Kotlin

Android-Entwicklung mit Kotlin

Kotlin hat Java als Standard-Programmiersprache in der Android-Entwicklung abgelöst. Die schlanke Syntax, Null-Sicherheit und Koroutinen machen den App-Code kürzer, stabiler, übersichtlicher und weniger fehleranfällig. Außerdem steht mit Jetpack Compose ein Paradigmenwechsel bei der UI-Gestaltung vor der Tür. Worum es dabei geht und wie Sie mit Kotlin moderne Android-Apps entwickeln, zeigt Ihnen Thomas Künneth in seinem Vortrag. Dabei liefert er Ihnen auch jede Menge Beispiele aus der App-Entwicklung für Android.

https://rheinwerk-kkon.de/warm-up/kuenneth-android-entwicklung-mit-kotlin/

6233177bc63ec02060206adef9108601?s=128

Thomas Künneth

April 22, 2021
Tweet

Transcript

  1. Android-Entwicklung mit Kotlin

  2. Agenda ▪ Kotlin Highlights • Schlanke Syntax • Nullsicherheit •

    Koroutinen ▪ Jetpack Compose ▪ Fazit
  3. thomas@thomaskuenneth.eu https://www.thomaskuenneth.eu/ @tkuenneth (Twitter) Beispiele: https://github.com/tkuenneth/begleitmaterialien-zu-android-11

  4. None
  5. https://play.kotlinlang.org/

  6. https://blog.jetbrains.com/kotlin/2021/04/ki-the-next-interactive-shell-for-kotlin/

  7. Agenda ▪ Kotlin Highlights • Schlanke Syntax • Nullsicherheit •

    Koroutinen ▪ Jetpack Compose ▪ Fazit
  8. None
  9. equals() und hashCode() fehlen

  10. liefert equals(), hashCode(), toString() und copy()

  11. None
  12. None
  13. Erweiterungsfunktion von InputStream Erweiterungsfunktion von Reader

  14. Eigentlich this.length

  15. None
  16. None
  17. None
  18. None
  19. None
  20. Agenda ▪ Kotlin Highlights • Schlanke Syntax • Nullsicherheit •

    Koroutinen ▪ Jetpack Compose ▪ Fazit
  21. None
  22. None
  23. null

  24. ?

  25. None
  26. None
  27. None
  28. • lateinit • ::t.isInitialized • UninitializedPropertyAccessException

  29. Agenda ▪ Kotlin Highlights • Schlanke Syntax • Nullsicherheit •

    Koroutinen ▪ Jetpack Compose ▪ Fazit
  30. None
  31. None
  32. None
  33. ▪ Funktioniert bei ausschließlichen Hintergrundaktivitäten recht gut ▪ Aber wie

    geht man vor, wenn die Hintergrundaktivität gelegentlich die UI aktualisieren soll? ▪ Denn wie praktisch alle UI Frameworks hat auch Android einen speziellen Thread dafür (Main- oder UI-Thread)
  34. https://github.com/tkuenneth/android-demos/tree/master/misc/AsyncTaskDemo

  35. ▪ Sind wie leichtgewichtige Threads ▪ Können Hierarchien bilden (structured

    concurrency) ▪ Werden durch Coroutine Builder erzeugt und gestartet ▪ Basieren auf dem Konzept unterbrechbarer Funktionen ▪ Haben einen Gültigkeitsbereich und werden mit Dispatchern ausgeführt
  36. None
  37. None
  38. None
  39. Agenda ▪ Kotlin Highlights ▪ Jetpack Compose ▪ Fazit

  40. https://github.com/tkuenneth/timecalculator

  41. • Layout-Files • Entfalten vom Komponentenbäumen zur Laufzeit • „Klassischen“

    Komponenten • Referenzen auf Views • Alle Änderungen erfolgen durch Manipulationen eines Objektgraphs
  42. ▪ Klappt bei einfachen Oberflächen sehr gut ▪ Wird mit

    zunehmender Komplexität schwierig zu warten ▪ Und damit fehleranfällig
  43. ▪ Keine Layout-Files mehr ▪ Kein Entfalten vom Komponentenbäumen ▪

    Keine „klassischen“ Komponenten ▪ Keine Referenzen auf Views
  44. ▪ Kleinste Einheit ist „composable function“ ▪ Wird mit @Composable

    annotiert ▪ Oberfläche entsteht durch Schachteln (Aufrufen) von Composables ▪ Bei Änderung an Daten: nicht Manipulation eines Objektgraphen, sondern Neukomposition
  45. None
  46. None
  47. None
  48. None
  49. None
  50. ▪ Grundsätzlich gilt: Composables so einfach wie möglich bauen ▪

    Ideal: alle Werte kommen „von außen“ (Text()) ▪ Wenn Zustand gehalten werden muss: remember {} ▪ Erzeugen z. B. mit mutableStateOf() ▪ Fachdaten werden „woanders“ gehalten, z. B. View Model
  51. Agenda ▪ Kotlin Highlights ▪ Jetpack Compose ▪ Fazit

  52. ▪ Nullsicherheit kann Code stabiler machen ▪ Schlanker Code ist

    leichter lesbar ▪ Weniger Boilerplate-Code durch vorhandene Erweiterungsfunktionen
  53. ▪ Zentrale Funktionen nicht mehr Teil der Plattform ▪ Immer

    mehr Wissen um Bibliotheken nötig ▪ Projekt-Setup wird immer aufwendiger ▪ Häufige Updates der Jetpack-Bestandteile
  54. Mit welcher Erweiterungsfunktion kann man in Kotlin einen Text aus

    einem Stream oder Reader einlesen?
  55. Vielen Dank! thomas@thomaskuenneth.eu https://www.thomaskuenneth.eu/ @tkuenneth (Twitter)