Datensatzverwaltung
System ist ein wichtiges Subsystem von J2ME, das darauf abzielt, eine dauerhafte Speicherung lokaler Daten in Anwendungen zu erreichen. Derzeit gibt es nur eine begrenzte Anzahl mobiler Informationsgeräte, die Dateisysteme unterstützen, so Record
Das Managementsystem ist für J2ME-Entwickler die bevorzugte Methode zur Implementierung der lokalen Datenspeicherung. Der Zweck dieses Artikels besteht darin, das Record Management umfassend vorzustellen
Systemkenntnisse.
Wie der Name schon sagt, handelt es sich beim Record Management System um ein System zur Datenverwaltung, und Record ist die wichtigste Einheit im System. Was im Speicherplatz des Mobilgeräts gespeichert wird, ist kein Feld, sondern ein Byte-Array. Die Spezifikation für mobile Informationsgeräte PROfile (MIDP) legt nicht fest, welche Art von Daten als Datensatz gespeichert werden können. Tatsächlich handelt es sich bei einem Datensatz um alle Daten, die durch ein Byte-Array dargestellt werden können, z. B. Bilder, Text usw. Aufzeichnen
Management
Die Aufgabe des Systems besteht darin, Datensätze zu speichern und eindeutig zu identifizieren, während die Aufgabe der Datendarstellung von der Anwendung übernommen wird. Daher müssen J2ME-Entwickler häufig mehr Energie für die Verarbeitung der Daten im Speicherplatz aufwenden. Der Zweck besteht darin, die Implementierung von MIDP zu vereinfachen und das J2ME-Subsystem so klein und flexibel wie möglich zu machen. Schließlich verfügen mobile Informationsgeräte nur über begrenzten Speicherplatz und Prozessorkapazitäten.
Record Store ist eine geordnete Sammlung einer Reihe von Datensätzen. Datensätze können nicht alleine existieren und müssen zum Record Store gehören. Record Store stellt sicher, dass die Lese- und Schreibvorgänge von Datensätzen atomar sind und die Daten nicht zerstört werden. In der API wird Record Store durch javax.microedition.rms.RecordStore implementiert. Die spezifischen Vorgänge von RecordStore werden im folgenden Artikel ausführlich vorgestellt.
Die MIDP-Spezifikation besagt, dass mobile Informationsgeräte mindestens 8 KB nichtflüchtigen Speicherplatz für Anwendungen bereitstellen müssen, um eine dauerhafte Datenspeicherung zu erreichen. Der von verschiedenen Geräten bereitgestellte Speicherplatz ist jedoch nicht derselbe. Wenn MIDlet
Die Suite nutzt Record Management
System, dann muss es den minimal benötigten Datenspeicherplatz angeben, indem es MIDlet-Data-Size in der MANIFEST-Datei und der JAD-Datei in Bytes festlegt, zum Beispiel MIDlet-Data-Size: 8192. Wenn Ihr Wert den vom Mobilgerät angegebenen Höchstwert überschreitet, wird Ihre Anwendung nicht ordnungsgemäß installiert. Dieser Wert ist nicht der maximale Datensatz, den das mobile Gerät tatsächlich für die Anwendung bereitstellt.
Management
Da der Systemspeicherplatz oft größer ist, sollten Entwickler es vermeiden, den für Anwendungen erforderlichen Mindestspeicherplatz zu groß festzulegen und bei Bedarf die Bedienungsanleitung des entsprechenden Geräts zu Rate zu ziehen. Das Lesen und Schreiben von Daten im nichtflüchtigen Speicher ist oft langsam. Daher ist es am besten, einen Caching-Mechanismus bereitzustellen, um die Leistung für häufig aufgerufene Daten zu verbessern. Aufzeichnen
Die Lese- und Schreibvorgänge des Managementsystems sind threadsicher, da der Record Store jedoch vom gesamten MIDlet gesteuert wird
Suite wird gemeinsam genutzt. Wenn also Threads, die auf verschiedenen MIDlets laufen, den Record Store betreiben, sollten wir die erforderliche Thread-Synchronisierung durchführen, um Datenschäden zu vermeiden.
Über Aufzeichnungen in MIDP1.0 und MIDP2.0
Die Implementierung des Managementsystems ist etwas unterschiedlich. MIDlets in derselben MIDlet-Suite können auf die Datensätze des anderen zugreifen.
Speichern. Allerdings gibt es in der Implementierung von MIDP1.0 keine Möglichkeit, Datensätze zwischen verschiedenen MIDlet-Suiten gemeinsam zu nutzen.
Speichermechanismus. In MIDP2.0 wird eine neue API bereitgestellt, um das Problem der gemeinsamen Nutzung von Datensätzen zwischen verschiedenen MIDlet-Suiten zu lösen.
In Bezug auf Store-Probleme wird der Freigabemechanismus beim Erstellen eines Record Store über den Autorisierungsmodus und die Lese-/Schreibsteuerungsparameter verwaltet. Ich werde ihn im nächsten Artikel ausführlich vorstellen.
Den Rekord stärken
Management
Der beste Weg, das System zu verstehen, besteht darin, die tatsächliche Entwicklung durchzuführen. Während der Entwicklung habe ich festgestellt, dass nicht alle MIDP-Implementierungen mobiler Geräte korrekt sind. Wenn ich die Methode getSizeAvaliable() verwende, um die verfügbaren Datensätze von Nokia6108 abzufragen
Der Wert, den ich bei Verwendung des Store-Speicherplatzes erhalten habe, betrug mehr als 1 MByte. Als ich jedoch 40 KB Daten schrieb, trat eine RecordStoreFullException-Ausnahme auf, sodass ich einen automatischen Testtelefondatensatz schrieb
Speichern Sie die Software mit dem größten Speicherplatz. Das Prinzip besteht darin, Daten zu einem bestimmten Zeitpunkt, beispielsweise 100–500 Millisekunden, an Record zu senden.
Schreiben Sie 1 KB Daten in den Speicher, wenn eine Ausnahme auftritt, dass der Speicherplatz voll ist. Die genaue Einheit ist K Bytes. Das Folgende ist der Quellcode des Programms und der Inhalt der JAD-Datei. Die Entwicklungsplattform ist Eclipse3.0RC2+EclipseME0.4.1+Wtk2.1+J2SDK1.4.2._03. Der Test wurde auf dem echten Nokia 6108 bestanden Der Maximalwert beträgt 31K. (Bitte nicht im Simulator testen, da die Ergebnisse bedeutungslos sind)
Zusammenfassung: Dieser Artikel führt die Leser nur zum Datensatz
Managementsystem hat ein allgemeines Verständnis, obwohl am Ende des Artikels eine Anwendung bereitgestellt wird. Es gibt jedoch keine ausführliche Analyse zur Verwendung von Record
Management
System. Im nächsten Artikel werden wir die Klassen im Paket javax.microedition.rms eingehend analysieren und uns dabei auf die Verwendung der RecordStore-Klasse konzentrieren.
javax.microedition.lcdui.Alert importieren;
javax.microedition.lcdui.AlertType importieren;
javax.microedition.lcdui.Display importieren; > Javax.microedition importieren .midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.rms.RecordStoreException; öffentliche Klasse RMSAnalyzer erweitert MIDlet
{
private Display display;
private CounterCanvas. counterCanvas;
privater Alarm;
geschützte Leere startApp() löst MIDletStateChangeException aus
try
{
String Interval = this.getAppProperty("INTER");
int t = Integer.parseInt(interval);
counterCanvas = new CounterCanvas(t, 1, this);
}
catch (RecordStoreException e)
{
this.showAlertError(e.getMessage ())
{
🎜> }
protected void destroyApp( boolean arg0) löst MIDletStateChangeException aus {
alert.setString(message );
alert.setType(AlertType.ERROR);
alert.setTimeout(3000);
display.setCurrent(alert);
}
}
import java.util.Timer;
import java.util.TimerTask;
import. java x.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Displayable;
importieren javax.microedition.lcdui.Graphics;
import javax.microedition.midlet.MIDletStateChangeException;
import javax.microedition.rms.*;
Die öffentliche Klasse CounterCanvas erweitert Canvas-Implementierungen CommandListener
{
privates RMSModel-Modell;
privater RMSAnalyzer;
privat int interTime;
private int counter;
private boolean go = true;
public static Command backCommand = new Command("退出", Command.EXIT, 3);
public static final int INC = 1;
public final Timer timer = new Timer();
public CounterCanvas(int interTime, int base, RMSAnalyzer rmsa)
throws. RecordStoreException
{
this.interTime = interTime;
this.counter = base;
this.RMSanalyzer = rmsa;
model = new. RM SModel(base, RMSanalyzer);
this.addCommand(backCommand);
this.setCommandListener(this);
TimerTask timerTask = new. TimerTask()
{
public void run()
{
try
{
model.writeRe cord(INC);
counter++;
} Catch (RecordStoreFullException e)
{
go = false;
model.deleteRMS();
timer.cancel( );
} Catch (RecordStoreException e)
{
model.deleteRMS();
RMSanalyzer .showAlertError(e.getMessage());
timer.cancel();
}
repaint();
}
};
timer.schedule (timerTask, 1000, interTime); this.counter = counter;
}
public void setInterTime(int interTime)
{
this.interTime =. interTime;
}
protected void paint(Graphics arg0)
{
int SCREEN_WIDTH = this.getWidth();
int = this.getHeight();
arg0.drawRect(SCREEN_WIDTH / 10, SCREEN_HEIGHT / 2,
SCREEN_WIDTH * 4 / 5, 10);
if(RMSanalyzer.getDisplay().isColor() )
{
arg0.fillRect(SCREEN_WIDTH / 10, SCREEN_HEIGHT / 2, Zähler, 10) ;
if (!go)
Das Obige ist der Inhalt des J2ME-Lernens – RMS vom Einstieg bis zur Kompetenz. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!