Question

Même avec une mauvaise connexion réseau?

Plus précisément, j'ai écrit du code qui lance un thread séparé (de l'interface utilisateur) qui tente de télécharger un fichier via HTTP POST. Je l'ai trouvé, cependant, que si la connexion est mauvaise, le processeur est bloqué sur outputstream.close () ou httpconnection.getheaderfield () ou toute lecture / écriture qui force des données sur le réseau. Cela provoque non seulement le fil à se coincer, mais vole tout le processeur, même si l'interface utilisateur ne répond plus.

J'ai essayé abaisser la priorité du fil, en vain.

Ma théorie est qu'il n'y a aucun moyen facile d'éviter ce comportement, ce qui explique pourquoi tout le tutoriel J2ME instruisent aux développeurs de créer un « envoyer des données sur le réseau ... » écran, au lieu d'envoyer tout dans un thread d'arrière-plan. Si quelqu'un peut me prouver le contraire, ce serait fantastique.

Merci!

Était-ce utile?

La solution

Un aspect important est que vous devez avoir une interface utilisateur générique ou un écran qui peut être affiché lorsque l'appel réseau en arrière-plan échoue. Il est à peu près un must sur une application mobile, J2ME ou autrement.

Comme Honza dit, cela dépend de la conception, il y a tellement de choses qui peuvent être faites, comme les données de préchargement au démarrage de l'application, ou les données de préchargement en fonction de l'écran qui est chargé (par exemple le chemin de navigation), ou ayant un ensemble de données par défaut intégré dans l'application, etc.

Une autre chose que vous pouvez essayer est un mécanisme intégré minuterie qui retente le téléchargement de données après un certain laps de temps, et après 5 dire abandon ou essais 1-2 minutes et l'affichage de l'écran générique ou message d'erreur.

Certains combinés J2ME permettent de détecter le mode avion, si possible, vous pouvez détecter et afficher rapidement un écran approprié.

De plus, un design qui a travaillé pour moi est la synchronisation des fils de l'interface utilisateur et de réseau, de sorte que ils ne se bloquer les uns les autres (prendre ce petit conseil à forte dose de sel comme je l'ai eu pas mal de bugs intéressants sur certains Samsung et combinés sanyo à cause de cela)

Dans l'ensemble pas de bonne réponse pour vous, mais différentes stratégies.

Autres conseils

Cela dépend à peu près sur la façon dont vous écrivez le code et où vous l'exécutez. Sur CLDC le concept de filetage est assez limité et si un thread est en train de faire d'autres threads opération de longue durée pourrait être (et sont usualy) bloqués par aussi. Vous devriez en tenir compte lors de la conception de votre application.

Vous pouvez diviser vos données de fichiers en morceaux, puis le télécharger avec plusieurs relances en cas d'échec. Cela dépend de votre stratégie d'application. Si votre priorité est de télécharger des données en vrac avec des échecs. Vous devez avoir assembler les morceaux sur le serveur pour reconstruire vos données. Cela peut avoir les frais généraux pour établir des connexions, mais la chance est élevé pour vos données se charger. Si vous n'êtes pas le téléchargement de fichiers en même temps que cela fonctionnera avec la facilité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top