# MIDlet

Ein MIDlet ist eine Software für ein Mobiltelefon oder vergleichbares mobiles Gerät (Smartphone, Sensornetzknoten), welche in der Programmiersprache Java geschrieben ist und dem Mobile Information Device Profile (MIDP) entspricht. MIDP ist wiederum ein Teil der Java Platform Micro Edition (Java ME) und eines der Profile der Connected Limited Device Configuration CLDC.
Mehrere MIDlets können zu einer MIDlet-Suite zusammengefasst werden, so dass sich die einzelnen MIDlets Ressourcen und Programmcode teilen können.
Viele der existierenden kostenpflichtigen Spiele für Mobiltelefone sind MIDlets auf Embedded-Java-Basis. Die kostenlosen Anwendungen reichen von kleinen E-Book-Readern über Kalender- oder Telnet-Clienten bis hin zu einem BASIC-Interpreter.

## Struktur

MIDlets bestehen aus 2 Dateien: einer "Programmname".jad und einer "Programmname".jar -Datei. Die .jad-Datei enthält Informationen zur MIDP-Version, dem Hersteller und dem Ort, wo die Anwendung heruntergeladen werden kann. Die .jar-Datei ist das eigentliche ausführbare Programm und kann teils auch ohne die zugehörige .jad-Datei installiert oder weitergegeben werden.

## MIDlet Lebenszyklus

MIDlets können sich, nachdem sie gestartet wurden, in mehreren Zuständen befinden und zwischen ihnen wechseln. Die Java Application Management Software (AMS) steuert den Lebenszyklus (engl. "life cycle") eines MIDlets. Dieser Programmmanager ist u. a. dafür verantwortlich, MIDlets zu initialisieren, zu starten, zu pausieren, wiederaufzunehmen und zu beenden. Demnach kann sich ein MIDlet in vier Zuständen befinden: Loaded, Paused, Active und Destroyed.
Nachdem ein MIDlet geladen wurde, beginnt es sein Leben im Zustand Loaded/Paused. Der Programmmanager ruft startApp auf, und das MIDlet wechselt in den Zustand Paused. Es gibt drei weitere Möglichkeiten in den Zustand Paused zu gelangen. Erstens, wenn der Programmmanager die Methode pauseApp aufruft. Dies kann z. B. durch einen eingehenden Telefonanruf erfolgen. Zweitens, wenn das MIDlet durch Aufruf der Methode notifyPaused sich selbst pausiert. Drittens, wenn startApp eine MIDletStateChangeException erzeugt. Der Programmmanager ruft diese Methode entweder nach der Initialisierung oder später auf, um wieder in den Zustand Active zu gelangen. Befindet sich ein MIDlet in Paused, sollten die laufenden Prozesse des MIDlets gestoppt werden, damit die Applikation im Vordergrund alle Ressourcen zur Verfügung gestellt bekommt, es zu keinen Ressourcekonflikten kommt und die Batterie nicht unnötig belastet wird. Aktive MIDlets (Active) führen die ihnen erteilten Aufgaben aus und beanspruchen dadurch Ressourcen für sich. Der Zustand Destroyed kann entweder von Paused oder Active erreicht werden. Um das MIDlet zu beenden, ruft der Programmmanager destroyApp mit dem boolean-Argument unconditional auf. In dieser Methode können letzte Befehle vor der endgültigen Terminierung durchgeführt werden, wie z. B. reservierten Speicher freigeben oder geöffnete Verbindungen schließen. Wenn der Programmmanager sich entschließt, das MIDlet zu beenden, dieses jedoch gerade wichtige Funktionen ausführt, kann das Setzen des Parameters unconditional auf false eine erzwungene Terminierung verhindern. Eine Garantie dafür gibt es allerdings nicht. Wie darauf reagiert wird, ist abhängig vom Gerät. In der Regel wartet der Programmmanager einige Zeit und versucht dann, das MIDlet erneut zu beenden. Ist unconditional gleich true, wird das MIDlet erzwungen beendet, ungeachtet der Bedeutung laufender Prozesse.