Mobiltelefonapplikationer med J2ME: Lektion 2

Idag: J2ME och MIDP
  • Vad är J2ME?
  • Vad är en konfiguration?
  • Vad är en profil?
  • Vad är ett tilläggs-API?
  • Vad betyder fragmentering?

Klicka på startknappen i den lilla mediespelaren ovan för att lyssna på lektionen. (Man kan behöva vänta en stund på att ljudfilen laddas ner.) Om mediespelaren inte syns, eller om det inte fungerar av något annat skäl, kan man klicka här för att ladda ner mp3-filen (ca 19 minuter, ca 9 megabyte). Beroende på hur webbläsaren är konfigurerad kan det kräva ett separat mp3-spelarprogram av något slag.

Tänk på att lektionerna ger en översikt och introduktion. Du måste läsa i kursboken och arbeta med övningarna för att tillgodogöra dig kursen!

Bild 1: W800i, en mobiltelefon med Java-stöd

Samma bild som i lektion 1. Ingen pekskärm, men knappar och en liten styrspak.

W800i, en mobiltelefon med Java-stöd, från 2005

Bild 2: Välj spelet QuadraPop

Val av spel

Bild 3: Java-logon

När telefonens JVM (den virtuella Java-maskinen) startar, visas Java-logon.

Java-logon som visas när Java-maskinen startar

Bild 4: QuadraPop

Själva spelet QuadraPop.

Java-spelet QuadraPop i full gång

Bild 5: Repetition av Java

Java kompileras inte till körbar kod för någon viss processor eller något visst operativsystem, utan Java kompileras till kod, bytekod, för en "virtuell maskin" (JVM, Java Virtual Machine). Den virtuella maskinen finns för många olika operativsystem och många olika datorer.

En enda version av källkoden, och ett enda körbart program. (Operativsystem och datortyp spelar inte längre så stor roll.)

En bild som visar idén med Java b

Bild 6: Olika Java-editioner

Tre olika "Java-spår": Dessutom skiljer man på:

J2SE, J2EE och J2ME

Ett tillägg hösten 2006 (inte med på ljudspåret):

Sun (som är företaget som gör Java) har slutat att prata om "Java 2" och "Java 2 Platform", utan säger numera bara "Java" och "Java Platform". Därför heter det inte längre Java 2 Platform, Micro Edition (J2ME), utan bara Java Platform, Micro Edition (Java ME). Det märks till exempel på att de flyttat sin J2ME-webbplats från http://java.sun.com/j2me/ till http://java.sun.com/javame/.

Tänk i fortsättningen på att när det står "Java 2" i kursen, så heter det numera bara "Java".

Bild 7: "Konfigurationer" och "profiler" i J2ME

J2ME är samlingsnamnet för olika Java-byggklossar gjorda för maskiner med begränsad kapacitet. En J2ME-implementation består av en konfiguration, en eller flera profiler samt tilläggs-API:er.

(API: Application Programming Interface, tillämpningsprogrammeringsgränssnitt - klasser, metoder mm som ett tillämpningsprogram kan använda sig av för att komma åt till exempel operativsystemets olika funktioner.)

Figur 1-1 på s 2 i kursboken. Konfigurationer:

Profiler: Konfigurationer och profiler

"Bild" 8: Konfigurationer

Om konfigurationer:
  • Bestämmer vilken JVM som används samt ett antal grundläggande API:er
  • Bestämmer oftast minsta tillgängliga mängden minne (både ROM och RAM)
  • Det finns för tillfället två konfigurationer, CDC och CLDC
CDC = Connected Device Configuration CLDC = Connected Limited Device Configuration

"Bild" 9: Profiler

Om profiler:
  • Bestämmer en ganska stor samling av API:er som är nödvändiga för att utveckla program
  • Det finns en massa olika profiler. Några kan kombineras och andra inte.
  • På mobiltelefoner är MIDP, Mobile Information Device Profile, den vanligaste
  • MIDP finns i två varianter, 1.0 och 2.0. 3.0 är på gång.

"Bild" 10: Tilläggs-API:er

  • Eftersom inte alla telefoner har alla funktioner ligger saker som exempelvis Bluetooth i ett tilläggs-API istället för i profilen eller konfigurationen
  • Alla tilläggs-API:er finns beskrivna på http://jcp.org/en/jsr/all
  • Exempel: JSR 82, Java APIs for Bluetooth

"Bild" 11: Fragmentering

  • "Write once, run anywhere" stämde inte för skrivbordsdator-Java, och är inte 100% sant på mobiltelefoner heller p.g.a. buggar i tillverkarnas implementationer. Vissa tillverkare kan ha en speciell bugg i många av sina enheter. Exempelvis hade Nokia problem med alignment när man renderade bilder (dvs ritade upp på skärmen) en gång i tiden.
  • Eftersom MIDP inte stödjer alla funktioner i en telefon och det tar tid att få igenom en JSR . Det händer det ofta att tillverkare lägger in egna packages för att ge tillgång till enhetsspecifika funktioner.

"Bild" 12 (nyinsatt): MIDP version 1.0 och 2.0

Kan man göra ett spel som QuadraPop med det som står i boken, eller behöver man mer API:er och kanske verktyg?

Spel som QuadraPop kan man göra helt och hållet med MIDP 2.0, som tas upp i boken, eftersom MIDP 2.0 har stöd för fullskärm och ett nytt multimediabibliotek för att spela upp ljud och musik. I MIDP 1.0 fanns varken stöd för ljud eller fullskärm, så varje tillverkare hade egna metoder för att åstadkomma det som saknades. Därför blev man tvungen att använda tillverkarspecifika API:er. Vill man sikta in sig på den stora marknaden som fortfarande använder MIDP 1.0, främst om man gör spel, får man läsa på saker som inte står i boken.

Läsanvisningar

Den här lektionen motsvaras av kapitel 1, Introduction, i kursboken. Läs kapitlet översiktligt som bakgrund.

Några frågor som kan användas som instuderingsfrågor:

  1. Vad är J2ME?
  2. Vad är en konfiguration?
  3. Vad bestäms av konfigurationen?
  4. Vilka konfigurationer finns det? Beskriv dem kort!
  5. Vad är en profil?
  6. Vad bestäms av profilen?
  7. Vilka profiler finns det? Beskriv dem kort!
  8. Vad menas med en stack?
  9. Vad är en JSR?
  10. Vilka fördelar är det man får med MIDP, jämfört med att till exempel programmera i C++ mot ett särskilt API för varje mobiltelefonmodell eller tillverkare? (Ledtrådar: portabilitet, säkerhet)
  11. Vad innebär, i MIDP-sammanhanget, en denial-of-service-attack?
  12. Nämn några tillverkare av mobiltelefoner som stöder MIDP.
  13. Vad gör man för att motverka fragmentering?
Om du vill skriva svar på instuderingsfrågorna, räcker det för de flesta frågorna med en eller några få meningar.

Programmeringsövningar

Det finns inga programmeringsövningar till den här lektionen.

Föregående lektion | Lektionslista | Nästa lektion


Thomas Padron-McCarthy (Thomas.Padron-McCarthy@tech.oru.se), 22 augusti 2006

Den här lektionen är utvecklad av Thomas Padron-McCarthy i samarbete med Magnus Runesson