Frage

Auch mit einer schlechten Netzwerkverbindung?

Im Einzelnen habe ich Code geschrieben, die einen separaten Thread startet (aus dem UI), die eine Datei über HTTP POST zu laden versucht. Ich habe jedoch festgestellt, dass, wenn die Verbindung schlecht ist, wird der Prozessor auf outputstream.close stecken () oder httpconnection.getheaderfield () oder in einer Lese- / Schreib, welche Daten über das Netzwerk zwingt. Dies verursacht nicht nur den Faden stecken zu bleiben, sondern stiehlt den gesamten Prozessor, so dass auch die Benutzeroberfläche reagiert nicht mehr.

Ich habe versucht, die Priorität des Threads senken, ohne Erfolg.

Meine Theorie ist, dass es keine einfache Möglichkeit, dieses Verhalten zu vermeiden, weshalb die all J2ME Tutorial Entwickler anweisen, einen ‚Senden von Daten über das Netzwerk ...‘ zu schaffen Bildschirm, anstatt nur alles in einem Hintergrund-Thread zu senden. Wenn mir jemand das Gegenteil beweisen kann, dass fantastisch wäre.

Danke!

War es hilfreich?

Lösung

Ein wichtiger Aspekt ist, dass Sie benötigen eine generische UI oder Bildschirm haben, die angezeigt werden können, wenn das Netzwerk Anruf im Hintergrund fehlschlägt. Es ist so ziemlich ein Muss auf jedem mobilen App, J2ME oder auf andere Weise.

Wie Honza sagte, es auf die Gestaltung abhängt, gibt es so viele Dinge, die getan werden kann, wie Prefetching Daten auf app Start oder Prefetching-Daten basierend auf dem Bildschirm, die geladen wird (dh Navigationspfad), oder mit einem Standard-Datensatz in die App usw. eingebaut.

Eine andere Sache, die Sie versuchen können, ist ein eingebauter Timer Mechanismus, der Daten-Download nach einiger Zeit wiederholt, und nach sagen 5 Versuche oder 1-2 Minuten abgebrochen und generic Bildschirm oder eine Fehlermeldung angezeigt wird.

Einige Handys in J2ME Erkennung von Flugzeug-Modus ermöglichen, wenn möglich, dass und unverzüglich anzuzeigen einen geeigneten Bildschirm erkennen kann.

Auch ein Entwurf, der für mich gearbeitet hat synchronisiert UI und Vernetzung Threads, so dass sie sich einsperren nicht (nimmt dieses Stück Beratung mit starken Dosis von Salz als ich auf einigem Samsung schon einige interessanten Fehler gehabt habe und sanyo Handys aus diesem Grund)

Alles in allem keine gute Antwort für Sie, aber unterschiedliche Strategien.

Andere Tipps

Es hängt ziemlich viel, wie Sie den Code schreiben und wo Sie es laufen. Auf CLDC ist das Konzept des threading ziemlich begrenzt und wenn ein Faden etwas langfristigen Betrieb andere Threads sein könnten tut (und sind usualy) als auch durch sie blockiert. Sie sollten das berücksichtigen, wenn Ihre Anwendung entwerfen.

Sie können Ihre Dateidaten in Stücke teilen und dann mit mehreren Wiederholungen bei einem Fehler hochladen. Dies hängt von Ihrer Anwendung Strategie. Wenn Ihre Priorität ist es, eine Massendaten mit aus Ausfall hochladen. Sie müssen haben die Stücke auf dem Server zusammenbauen Ihre Daten erstellen zurück. Dies kann die Overhead-Verbindungen für die Herstellung aber die Chance ist hoch, für die Daten hochgeladen werden erhalten. Wenn Sie nicht das Hochladen von Dateien gleichzeitig wird dies mit Leichtigkeit arbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top