Try   HackMD

2021-03-01 | Android | Base de données | Room

tags: kotlin android gobelins

Programmation multi thread

  • Les instructions exécutées dans un programme sont dans 1 thread
  • Généralement, les instructions s'éxecutent de manière séquentielle
  • On peut éxecuter plusieurs instructions parallèlement dans un multi thread

Exécution synchrone

Instructions éxecutées séquentiellement

Exécution asynchrone

Instructions éxecutées en parallèle

En android

Thread principal

  • Interface gérée par 1 thread (uiThread)
  • Seule thread qui modifie les élements de la vue et les interactions à l'utilisateur
  • Si 1 instruction bloque le thread, l'interface ne réagit plus

Gestioin des threads

  • La gestion des threads est de la responsabilité du développeur
  • Android bloque certaines actions si elles s'éxecutent sur le thread principal
  • Les opérations I/O ne sont pas autorisés sur le thread principal (BDD, Internet)
  • Si les actions prennent plus de 1secondes, il ne faut pas le faire sur le thread principal

Synchronisation des threads

  • Android permet de mettre automatiquement à jour l'interface à la fin d'une opération d'un thread secondaire
    • Requete http
    • BDD
    • Image from url

Créer un thread

Executors.newSingleThreadExecutor().execute { // code }

Le code ci-dessous permet de repasser la min au thread principal (le seule à avoir la main sur l'interface) :

Executors.newSingleThreadExecutor().execute { // code runOnUiThread { Toast.makeText(baseContext, "On main thread", Toast.LENGTH_SHORT).show() } }

Architecture component (librairies d'architecture)

Ensemble de librairies permettant de structurer une application Android :

  • Robuste
  • Testable
  • Maintenable

Permet de comprendre facilement l'application et son code :

  • Bonnes pratiques
  • Code propre
  • Réutilisation
  • Peu de dépendances
  • Faciliter la maintenance

Base de données

Classes et entités

Ci dessous une classe :

class Person { val firstName: String val lastName: String }

Ci dessous une classe transformée en entité pour la bdd :

@Entity class Person { @PrimaryKey (autogenerate = true) val id: UUID @ColumnInfo(name = "first_name") val firstName: String? @ColumnInfo(name = "last_name") val lastName: String }

Tout les champs doivent être public ou avoir un getter pour permettre à Room d'y accéder.

Relations

// plus tard

link in andorid.com => reference/android/arch/persistence/room/package-summary