Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Android-sovelluksen arkkitehtuuri

Android-sovelluksen toteutus on jaettu useisiin komponentteihin:

  • jaettu Android/OpenHarmony-toteutus servoshell:lle (ports/servoshell/egl)
  • Android-spesifinen servoshell-integraatio (ports/servoshell/egl/android.rs)
  • pääaktiviteetti (support/android/apk/servoapp/src/main/java/org/servoshell)
  • ServoView-komponentti (support/android/apk/servoview/src/main/java/org/servo/servoview)
    • Android SurfaceView (ServoView.java)
    • Servo-moottorin wrapper (Servo.java)
    • JNI servoshell-integraatio (JNIServo.java)

Ohjauskulku

Upottaja -> Servo

Sovelluksen sisällä alkavat tapahtumat käynnistyvät joko natiivin sovellus-UI:n toimesta (esim. URL:n lataus) tai osana ServoView-komponenttia (esim. kosketussyöte). Kaikki natiivi sovellus-UI määritellään pääaktiviteetissa ja käyttää ServoView-komponentin julkista API:a vuorovaikutukseen taustalla olevan Servo-instanssin kanssa.

ServoView on vastuussa koordinoinnista kahden säieen välillä — GL-säie, joka ajaa varsinaista Servo-instanssia, ja UI-säie. Se on myös vastuussa syöte-tapahtumien välittämisestä moottorille ja alustatapahtumien, kuten pinnan koon muutoksen, käsittelystä.

Servo -> Upottaja

Moottorin sisällä alkavat tapahtumat täytyy saada upotussovelluksen eri kerroksiin. Alin taso on Servo-moottorin wrapper, joka toteuttaa JNIServo.Callbacks-rajapinnan. Nämä callbackit mahdollistavat moottorin wrapperin käynnistää callbackit UI- ja GL-säieillä tarvittavan toiminnon mukaan. UI-säieellä tapahtuvat toiminnot sisältävät kehotteen näyttämisen ja näppäimistön käynnistämisen, kun taas GL-säie-toiminnot sisältävät Servo-tapahtumasilmukan pyörittämisen ja GL-renderöintitoiminnot. Servo-komponentti altistaa Client-rajapinnan UI-säie-toiminnoille, mahdollistaen viestinnän upotussovelluksen ylimpien kerrosten kanssa.

JNI-integraatio

Jokainen JNIServo-luokan native-jäsen on toteutettu android.rs-tiedostossa #[unsafe(no_mangle)]-funktiona, jolla on vastaava nimi. jni-rs-craten dokumentaatio sisältää lisätietoa tästä integraatiosta.