Ich schreibe gerade eine App, die den Menüplan der Mensa unserer Universität anzeigt. Um sie plattformunabhängig zu machen, verwende ich Phonegap; das XML-Parsing erfolgt mit Hilfe von JQuery, das Layout wird mit JQuery Mobile generiert.
Das Parsen der XML-Datei für die Menüs dauert auf meinem Motorola Defy etwa 1-2 Sekunden. Wenn man z.B. den Standort zu einer anderen Cafeteria ändert, indem man auf das Optionsfeld klickt, friert die GUI für diese Sekunde ein. Ich fand das Konzept der Worker Threads in JavaScript und beschloss, das Parsen der XML-Daten an einen Worker Thread zu delegieren. Leider musste ich feststellen, dass JQuery in Worker Threads nicht funktioniert :-( Dann fand ich das Plugin JQuery.hive, das meine Probleme zu lösen schien. Ich erstelle nun den Thread innerhalb der Hive-Umgebung, sende eine Nachricht, verarbeite sie im Worker Thread und erhalte eine Antwort. Leider funktioniert dies nur in Firefox und nicht in meiner Android/Phonegap-Applikation.
Hier generiere ich den Worker:
$(function() {
$("#mydiv").append("Start |");
$.Hive.create({
worker : 'Worker_Parser.js',
receive : function(data) {
$("#mydiv").append('RECEIVED MESSAGE: ' + data.message + ' | ');
}
});
$("#mydiv").append("Worker generated | ");
});
$.Hive.get(0).send("test");
$("#mydiv").append("End ");
Dies ist der Arbeitsfaden:
importScripts('jquery.hive.pollen.js');
$(function (data) {
$.send("test");
});
Firefox zeigt
Start | Worker generated | End | RECEIVED MESSAGE: test |
Der Android Broswer bricht das Skript ab, wenn er versucht, einen Thread zu starten und zeigt nur an:
Start |
Soll JQuery.hive überhaupt unter Android laufen? Gibt es einen besseren Weg, um mein Problem des Parsens von XML zu lösen, ohne dass die GUI einfriert?
Vielen Dank im Voraus,
Tom