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/

Thomas Künneth

April 22, 2021
Tweet

More Decks by Thomas Künneth

Other Decks in Technology

Transcript

  1. Android-Entwicklung
    mit Kotlin

    View Slide

  2. Agenda
    ▪ Kotlin Highlights
    • Schlanke Syntax
    • Nullsicherheit
    • Koroutinen
    ▪ Jetpack Compose
    ▪ Fazit

    View Slide

  3. [email protected]
    https://www.thomaskuenneth.eu/
    @tkuenneth (Twitter)
    Beispiele: https://github.com/tkuenneth/begleitmaterialien-zu-android-11

    View Slide

  4. View Slide

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

    View Slide

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

    View Slide

  7. Agenda
    ▪ Kotlin Highlights
    • Schlanke Syntax
    • Nullsicherheit
    • Koroutinen
    ▪ Jetpack Compose
    ▪ Fazit

    View Slide

  8. View Slide

  9. equals() und
    hashCode()
    fehlen

    View Slide

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

    View Slide

  11. View Slide

  12. View Slide

  13. Erweiterungsfunktion von InputStream Erweiterungsfunktion von Reader

    View Slide

  14. Eigentlich this.length

    View Slide

  15. View Slide

  16. View Slide

  17. View Slide

  18. View Slide

  19. View Slide

  20. Agenda
    ▪ Kotlin Highlights
    • Schlanke Syntax
    • Nullsicherheit
    • Koroutinen
    ▪ Jetpack Compose
    ▪ Fazit

    View Slide

  21. View Slide

  22. View Slide

  23. null

    View Slide

  24. ?

    View Slide

  25. View Slide

  26. View Slide

  27. View Slide

  28. • lateinit
    • ::t.isInitialized
    • UninitializedPropertyAccessException

    View Slide

  29. Agenda
    ▪ Kotlin Highlights
    • Schlanke Syntax
    • Nullsicherheit
    • Koroutinen
    ▪ Jetpack Compose
    ▪ Fazit

    View Slide

  30. View Slide

  31. View Slide

  32. View Slide

  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)

    View Slide

  34. https://github.com/tkuenneth/android-demos/tree/master/misc/AsyncTaskDemo

    View Slide

  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

    View Slide

  36. View Slide

  37. View Slide

  38. View Slide

  39. Agenda
    ▪ Kotlin Highlights
    ▪ Jetpack Compose
    ▪ Fazit

    View Slide

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

    View Slide

  41. • Layout-Files
    • Entfalten vom Komponentenbäumen zur Laufzeit
    • „Klassischen“ Komponenten
    • Referenzen auf Views
    • Alle Änderungen erfolgen durch Manipulationen eines Objektgraphs

    View Slide

  42. ▪ Klappt bei einfachen Oberflächen sehr gut
    ▪ Wird mit zunehmender Komplexität schwierig zu warten
    ▪ Und damit fehleranfällig

    View Slide

  43. ▪ Keine Layout-Files mehr
    ▪ Kein Entfalten vom Komponentenbäumen
    ▪ Keine „klassischen“ Komponenten
    ▪ Keine Referenzen auf Views

    View Slide

  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

    View Slide

  45. View Slide

  46. View Slide

  47. View Slide

  48. View Slide

  49. View Slide

  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

    View Slide

  51. Agenda
    ▪ Kotlin Highlights
    ▪ Jetpack Compose
    ▪ Fazit

    View Slide

  52. ▪ Nullsicherheit kann Code stabiler machen
    ▪ Schlanker Code ist leichter lesbar
    ▪ Weniger Boilerplate-Code durch vorhandene
    Erweiterungsfunktionen

    View Slide

  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

    View Slide

  54. Mit welcher Erweiterungsfunktion kann
    man in Kotlin einen Text aus einem Stream
    oder Reader einlesen?

    View Slide

  55. Vielen Dank!
    [email protected]
    https://www.thomaskuenneth.eu/
    @tkuenneth (Twitter)

    View Slide