Sauvegarde efficacement les téléchargements de données dans Android

J'ai mis en place un service de file d'attente dans Android qui modifiera les états en fonction de la file d'attente et des événements de connexion wifi / data.

Je file les transactions à afficher sur une URL distante. Si l'appareil dispose d'une connexion de données ou wifi, il itera la file d'attente et publiera des données dans l'url jusqu'à ce que la file d'attente soit vide ou qu'il y ait un événement de déconnexion.

  • Désactiver la mise en ligne dans logcat en adt 20
  • Annotation de niveau API Android pour les bibliothèques Android
  • AlertDialog avec vue personnalisée: redimensionner pour envelopper le contenu de la vue
  • Cloner la visualisation de texte pour l'ajouter à un ViewGroup
  • Comment configurer la mise en page de manière dynamique dans Android
  • BackUpAgentHelperClass ne s'appelle pas
  • Je peux me connecter à mon application, activer le mode avion, générer des données, éteindre le mode avion, et la transaction est affichée. Pas de ralentissement, même avec des milliers de transactions. (J'essayais de le faire un peu)

    Entrez: faible réception! Mon application ralentit énormément lorsque la réception 3G est faible. (Oui, tout le téléchargement se produit sur le fil de ui). Il semble que la cause de ce ralentissement ait à voir avec le message sur le serveur en prenant très longtemps et parfois juste en panne.

    Ma question est, comment puis-je résoudre cela? Vérifiez la qualité du signal? Sais-tu une adresse connue? Comment d'autres applications, comme Gmail, résolvent-elles? Cela doit être un scénario commun!

    6 Solutions collect form web for “Sauvegarde efficacement les téléchargements de données dans Android”

    Eh bien, si vous pouviez potentiellement avoir des milliers de tâches qui doivent être exécutées, alors elles devraient être gérées. Avez-vous pensé à mettre en œuvre votre propre ThreadPoolExecutor ? La documentation est très bonne et la classe est facile à comprendre, mais si vous avez besoin d'exemples, essayez ces sites:

    Le bénéfice de cela est que vous pouvez limiter le nombre maximum de threads que vous générez, de sorte que vous ne devriez pas ralentir le système si vous limitez votre nombre de threads à un nombre raisonnable (pour Android, je recommanderais pas plus que 20).

    Peut-on faire un réglage précis du délai de prise et de conenction? Ainsi, si votre connexion est lente et bloquée, un timeout se produira et la transmission échouera.

    Une fois la connexion / envoi échouée, vous pouvez réessayer plus tard ou faire autre chose.

    Pour ajuster les délais d'attente, vous pouvez utiliser le code suivant:

     HttpParams httpParameters = new BasicHttpParams(); HttpConnectionParams.setConnectionTimeout(httpParameters, 30 * 1000); HttpConnectionParams.setSoTimeout(httpParameters, 15 * 1000); HttpClient client = DefaultHttpClient(httpParameters); // use client... 

    Nous avons une situation similaire pour notre application. Nous avons considéré les problèmes de signal comme une réalité et une fois que cela se produit. L'un des points que nous suivons n'est pas de supprimer tout contenu du périphérique, à moins d'avoir une confirmation fonctionnelle du serveur et de baser sur le code d'état http. Comme dans le réseau lent ou les cas où nous pouvons perdre le signal soudainement, alors que nous pouvons avoir A affiché notre contenu, il y a eu de nombreux cas où les données n'ont été reçues que partiellement. Et nous avons donc décidé de laisser le serveur connaitre le périphérique d'une certaine manière [le résultat de certains appels de demande basés sur HTTP par un appareil] que le contenu a été reçu. Plus que la performance ou la vérification du réseau, la question que vous avez posée, nous avons eu besoin d'un tel comportement pour la robustesse de notre application.

    Vous devriez consulter les en-têtes HTTP Range, par exemple comme ici .

    Le serveur doit écrire la charge utile sur le disque pendant la lecture et gérer les déconnexions. Le client ne sait pas combien la charge utile d'octets a effectivement atteint le serveur, il doit donc être synchronisé avec le serveur chaque fois qu'il y a eu une erreur réseau. N'oubliez pas de traiter les problèmes de batterie et d'utilisateur aussi 😉

    Si vous souhaitez attendre un meilleur signal, peut-être que la classe SignalStrength , avec ses méthodes getCdmaDbm, getEvdoDbm et getGsmSignalStrength, est ce que vous recherchez.

    Consultez ceci: http://www.youtube.com/watch?v=PwC1OlJo5VM#!

    Des astuces et astuces de codage avancées, des techniques d'économie de bande passante, des modèles de mise en œuvre, une exposition à certaines des fonctionnalités de l'API moins connues et un aperçu de la façon de réduire le drain de la batterie en s'assurant que votre application est un bon citoyen sur le réseau de transport.

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