Certains périphériques Android sont extrêmement lents lors du rendu des éléments de toile

J'ai développé une application pour les appareils Android et j'ai trouvé que samsung galaxy S4 spécifiquement, a des performances extrêmement mauvaises lorsque l'application / la page Web utilise une toile. Il est étrange que ce ne soit pas toujours le cas.

J'ai testé 2 exemples d'applications.

  • Impossible de se connecter via WiFi, mais possible via Mobile Data
  • Afficher / masquer le softkeyboard Android sur fragment replace
  • Ajouter une case "Se souvenir de moi"
  • Comment envoyer un objet d'une activité Android à une autre en utilisant des Intents?
  • Comment supprimer le rembourrage autour de Android CheckBox
  • Type de contenu Android Retrofit comme application / x-www-form-urlencoded
  • Http://ie.microsoft.com/testdrive/Performance/FishIETank/Default.html

    et

    Http://ie.microsoft.com/testdrive/Graphics/TouchEffects/Default.html

    Le premier fonctionne bien et surpasse mon Nokia (qui est dual core) et est attendu. Cependant, l'autre démo, est presque complètement insensible et le taux d'image est proche de 1, où tous les autres périphériques le rendent bien.

    Puisque la première application fonctionne bien et que l'autre ne le fait pas, cela implique la question, pourquoi? Le premier n'a pas d'auditeurs d'événements, alors que l'autre a des auditeurs touchants. Le touchmove pourrait-il être la cause plutôt que de la toile … ou est-ce que cette démonstration utilise certaines fonctionnalités de toile que l'autre n'est pas, et a donc de mauvaises performances.

    J'ai lu beaucoup de sujets sur cette question, et aucun ne semble avoir répondu. La plupart ont beaucoup de mois … alors j'ai pensé que je ferais un nouveau sujet.

    Existe-t-il un moyen de résoudre le problème de la toile sur Samsung S4 … et potentiellement d'autres appareils Android exécutant 4.2.x. Si les utilisateurs de StackOverflow ici ont S4, pouvez-vous tester les deux démos et confirmer mes observations?

  • OnItemClickListener utilisant ArrayAdapter pour ListView
  • Attention! Aucun répertoire de symboles trouvé - vérifiez votre configuration native de débogage
  • TextInputLayout: Comment donner le rembourrage ou la marge à l'indice?
  • Vala pour Android?
  • Erreur: BinderProxy @ 45d459c0 n'est pas valide; Votre activité fonctionne-t-elle?
  • Nouvel enregistrement de l'API GCM Inconnu Erreur source
  • One Solution collect form web for “Certains périphériques Android sont extrêmement lents lors du rendu des éléments de toile”

    Je soupçonne fortement que ce n'est pas un problème spécifique à Canvas, mais un problème de requestAnimationFrame . La première animation n'essaie pas d'utiliser requestAnimationFrame , mais la seconde, dans ce fichier à la line 206 .

    Le navigateur Android sur firmwares <= 4.2 ne supporte pas requestAnimationFrame et utilise plutôt setTimeout , en divisant une seconde par une fréquence d'image spécifiée en Hz, qui exécute les rendus dans la boucle d'événement normal.

    setTimeout ne s'exécute pas à l'heure exacte en millisecondes demandée, mais encheque l'événement en boucle au moment spécifié. Si la boucle d'événement est accrochée par un autre javascript sur la page, ou si le périphérique requestAnimationFrame décide que quelque chose d'autre est plus important, le temps d'exécution est très vulnérable à la requestAnimationFrame sans l'API requestAnimationFrame , et les requestAnimationFrame rappel lancés à l'aide de setTimeout vont bégayer . Plus d'informations sur la résolution et le timing de setTimeout .

    Malheureusement, vous êtes à la merci de la file d'attente des événements si vous requestAnimationFrame (1) cette approche basée sur Canvas et (2) sur une plate-forme qui ne prend pas en charge la requestAnimationFrame . Voici la table de référence pour ce que les navigateurs prennent en charge de la fonctionnalité.

    À votre santé!

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