Modèle pour plusieurs chargeurs avec LoaderManager?

J'utilise Fragments et LoaderManager. Je dois lancer un nombre inconnu de tâches, et elles peuvent être exécutées en parallèle (sinon je voudrais simplement réutiliser un seul chargeur). Par exemple, j'ai une liste, et chaque ligne peut avoir un bouton pour enregistrer le contenu de cette ligne sur un serveur Web. L'utilisateur pourrait lancer une demande de sauvegarde sur plusieurs éléments en parallèle.

private int nextId = 0; private void onClickListener() { Bundle bundle = new Bundle(); bundle.putNextData(...); getLoaderManager().initLoader(nextId++, bundle, this); } 

Je pourrais essayer de la comptabilité moi-même, alors créez un pool de chargeurs manuellement et réutilisez-les lorsque cela est possible, semble-t-il que ce soit quelque chose déjà mis en œuvre par l'API?

  • Aide avec des attributs de vue personnalisés dans un projet de bibliothèque Android
  • Android sort de la pile d'activité
  • InDither obsolète dans Android android
  • L'exécution instantanée ne fonctionne pas
  • Limitations de la capture vidéo dans Phone Gap + Native Plugins
  • Démarrez l'application à un moment précis
  • Merci

  • Impossible de mux à la fois audio et vidéo
  • Android SDK Manager ne sera pas mis à jour: connexion à https://dl-ssl.google.com refusée
  • Taille de police du bouton Android
  • Le constructeur de la classe intérieure privée est-il également privé?
  • Android: dialogue Web contextuel ou popup
  • Android: le clavier se chevauche avec le EditText (avec des images imprimées)
  • 3 Solutions collect form web for “Modèle pour plusieurs chargeurs avec LoaderManager?”

    Je ne pense pas que vous devriez utiliser un chargeur pour sauvegarder des données sur un serveur distant.

    Au lieu de cela, utilisez un service IntentService ou quelque chose de similaire pour traiter une file d'attente d'opérations "sauvegarder". De cette façon, votre communication avec le serveur web peut être basculée, effondrée (c'est-à-dire que plusieurs sauvetages en file d'attente pour un seul élément peuvent être effondrés en une seule opération) et vont au delà de la durée de vie de votre activité si nécessaire.

    Une file d'attente de sauvegarde traitée par un IntentService (ou équivalent) est également un excellent moyen de réessayer les opérations échouées avec backoff, car vous pouvez implémenter des tentatives retardées avec un retour exponentiel utilisant AlarmManager .

    Un service Intent ou un service lié sont toujours de bonnes approches pour cela. En tant que points romains, notez que le fait de retenir plusieurs demandes et de les appeler séparément n'est pas fortement recommandé (il est fort probable que vous donnez beaucoup de travail à la connexion radio – lors de l'utilisation de données – qui, entre autres, drainent votre batterie. Lire à ce sujet)

    Je recommanderais personnellement d'utiliser un service lié avec une file d'attente de requêtes et un groupe de threads disponibles (cette approche vous donne le contrôle total pour des opérations de réseau plus complexes, comme dans votre cas). Il y a plus de détails sur l'approche ici et un exemple de travail testcase ici .

    Mettez-nous au courant de votre progression.

    Vous êtes dans la bonne direction, permettez-moi de vous aider un peu.

    Réutiliser est en effet une bonne idée, et vous ne devez pas vous en soucier parce que Android l'a fait pour vous (ou Java en fait;)

    Il s'appelle ThreadPoolExecuter , vous pouvez lancer autant de tâches que vous le souhaitez et il n'ouvrira que le nombre prédéfini de threads. (La meilleure pratique consiste à essayer d'ouvrir autant de threads qu'une connexion réseau parallèle peut être exécutée sur le périphérique. Entre 4 et 9).

    Et si vous essayez de télécharger la même URL deux fois, vous pouvez vous protéger et ouvrir une seule tâche pour elle.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.