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

Développer une application en Kotlin

Développer une application en Kotlin

Voici les slides utilisés à Devoxx pour présenter la programmation Android en Kotlin. Ces slides ont été utilisés lors d'un hands lab de 3h

Dev-Mind

April 17, 2019
Tweet

More Decks by Dev-Mind

Other Decks in Programming

Transcript

  1. Android est l’OS le plus utilisé tout device confondu (pas

    encore en Europe et Amérique du nord) Février 2019
  2. Camera Podomètre Luminosité Thermomètre Microphone Capteur empreinte Accéléromètre Magnétomètre Capteur

    proximité Gyroscope Prise de pouls Reconnaissance gestuelle Baromètre ...
  3. Wear OS Montres... Android Things Pour l’IOT Android TV Pour

    le salon consoles, TV Android Auto Pour les voitures autonomes ou non Chrome OS Déployer sur ce nouvel OS Android JetPack Librairies et utilitaires pour simplifier le dev
  4. Linux Kernel Hardware Abtraction Layer (HAL) Native C/C++ librairies Android

    Runtime (ART) Java / Kotlin API Framework System apps User apps
  5. Application 1 ne peut pas ... Lire les données Utiliser

    la mémoire Utiliser les ressources CPU Utiliser les devices … de l’application 2
  6. Cupcake 1.5 / Api 3 2009 Donut 1.6 / Api

    4 2009 Eclair 2.0 - 2.1 / Api 5-7 2010 Froyo 2.2 / Api 8 2011 Gingerbread 2.3 / Api 9-10 2011 Honeycomb 3.0-3.2 / Api 11-13 2011 Ice Cream Sandwich 4.0 / Api 14-15 2011 Jelly Bean 4.1-4.3 / Api 16-18 2012 Kit Kat 4.4 / Api 19-20 2013 Lolipop 5.0-5.1 / Api 21 2014 Marshmallo w 6.0 / Api 22 2015 Nougat 7.0-7.1 / Api 23 2016 Oreo 8.0-8.1 / Api 24 2017 Pie 9.0 / Api 25 2018
  7. Nougat 7.0-7.1 / Api 23 2016 Pie 9.0 / Api

    28 2018 utilisation 0% Oreo 8.0-8.1 / Api 24 2017 Marshmallow 6.0 / Api 22 2015 Lolipop 5.0-5.1 / Api 21 2014 Kit Kat 4.4 / Api 19-20 2013 Source : Android dashboard Octobre 2018
  8. Résolution = nombre de pixel horizontal x nombre de pixel

    vertical Taille = nombre de pouce en diagonale
  9. dp= density-independent pixels pour les layouts et images sp =

    scalable pixels pour les fonts car s’adapte aux paramètres d'accessibilité (sp ne s’utilise pas pour les layouts)
  10. Rendre les développements plus rapides et plus simples en poussant

    l’expressivité Kotlin se base sur la JVM et est complètement interopérable avec Java
  11. Kotlin simplifie la syntaxe Immutabilité Adieu les null pointers Paramètres

    par défaut Data class Extensions de fonction Fonctions d’ordre supérieur Coroutines
  12. 1.0 Mise en place du projet et ressources 2.0 Premier

    écran, page d’accueil ConstraintLayout 3.0 Ajouter un menu 4.0 Un écran liste avec un RecyclerView 5.0 Ecran création et de modification 6.0 Utilisation de Room pour la persistance dans SQLite 7.0 Jouer avec le cycle de vie 8.0 Utiliser les ViewModel et Livedata 9.0 Mettre en place des tests d’intégration
  13. Décrire la vue dans un layout Un layout se définit

    en XML Créer une activité Classe Java qui va hériter de AppCompatActivity Lier l’activité à la vue Se fait dans le onCreate de l’activité Déclarer la vue comme point d’entrée Mise à jour du fichier AndroidManifest.xml Activité
  14. Définit la structure d’une interface utilisateur Revient à placer des

    widgets (View) dans des layouts (ViewGroup) ViewGroup principal ViewGroup View View View View
  15. Devoxx Bienvenue à Devoxx Maroc, nous allons apprendre Android Devoxx

    Bienvenue à Devoxx Maroc, nous allons apprendre Android ConstraintLayout TextView ImageView TextView
  16. Created Started visible Paused Visible partiellement Stopped masqué Resumed visible

    onCreate() onStart() onRestart() onResume() onPause() onResume() onStop() onDestroy()
  17. Devoxx Bienvenue à Devoxx Maroc, nous allons apprendre Android Une

    vue utilise différentes ressources Color Menu Drawable String Font Layout Values Mipmap ... Style
  18. <?xml version="1.0" encoding="utf-8"?> <resources> <color name="colorPrimary">#29333f</color> <color name="colorPrimaryDark">#18202b</color> </resources> app/src/main/res/values/colors.xml

    @color/colorPrimary Utilisation en XML (layout, autre ressource) resources.getColor(R.color.colorPrimary) Utilisation en Kotlin (activité ou autre)
  19. Android détecte les changements de configuration et charge les bonnes

    ressources au runtime <resources_name>-<config_qualifier> par exemple app/src/main/res/drawable/image.jpg app/src/main/res/drawable-xxhdpi/image.jpg app/src/main/res/values/colors.xml app/src/main/res/values-night/colors.xml
  20. Ma liste List View Ma liste Item 1 Item 2

    Item 3 Item 4 Item 5 Item ... Item n Layout 1 Layout 2 Layout 3 Layout 4 Layout ... Layout n Android implémente une vue pour chaque ligne de votre liste
  21. Ma liste List View Ma liste Item 1 Item 2

    Item 3 Item 4 Item 5 Item ... Item n Layout 1 Layout 2 Layout 3 Layout 4 Layout ... Layout n Android implémente une vue pour chaque ligne de votre liste
  22. Ma liste List View Ma liste Item 1 Item 2

    Item 3 Item 4 Item 5 Item ... Item n Layout 1 Layout 2 Layout 3 Layout 4 Layout 5 Layout 6 Android implémente une vue pour chaque ligne visible de votre liste et les recycle quand vous scrollez
  23. Quand l’application se lance Android démarre un processus avec un

    seul thread d’exécution Main Thread Error
  24. Quand l’application se lance Android démarre un processus avec un

    seul thread d’exécution AsyncTask Worker
  25. Une coroutine est une unité de traitement permettant d’exécuter du

    code non-bloquant et asynchrone (thread allégé) open class MainActivity : AppCompatActivity(), CoroutineScope { override val coroutineContext: CoroutineContext get() = Dispatchers.Default override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) launch { … } } }
  26. Inner classe non statique en Kotlin les classes nested sont

    par construction statiques Classes anonymes beaucoup utilisées pour la gestion des événements (penser à détruire les références) Privilegier le pattern Singleton pour vos objets communs Application context plutôt que activity context
  27. Created Started visible Paused Visible partiellement Stopped masqué Resumed visible

    onCreate() onStart() onRestart() onResume() onPause() onResume() onStop() onDestroy()
  28. Activité A contient les fragments A et B Activité A

    contient le fragment A Activité B contient le fragment B La sélection d’un item à gauche met à jour le fragment B à droite La sélection d’un item à gauche ouvre l’activité B
  29. Lifecycle owner Lifecycle Lifecycle observer Your code read receive events

    Fragment et AppCompacteActivity implémentent LifeCycleOwner
  30. INITIALIZED DESTROYED CREATED STARTED RESUMED Initial start dead state ON_PAUSE

    ON_STOP ON_DESTROY Rotation activité démarrée ON_CREATE ON_START ON_RESUME
  31. UI contrôleur Fragment ou activité ViewModelProvider Fournit le ViewModel ViewModel

    observe Gère interaction utilisateur Gère interaction données
  32. onCreate onStart onResume onPause onStop onDestroy onCreate onStart onResume onPause

    onStop onDestroy Lancement écran Rotation de l’écran Sortie écran onCleared ViewModel scope
  33. UI contrôleur Fragment ou activité ViewModelProvider Fournit le ViewModel ViewModel

    observe Gère interaction utilisateur Gère interaction données LiveData<Pojo> Datasource