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.

  • Supprimer le rembourrage vertical de l'horizontal ProgressBar
  • Icône de recherche Android
  • Comment puis-je voir de longs textes / msg dans Logcat?
  • Comment implémenter Swipe In Android Game Without View
  • PagerAdapter.notifyDataSetChanged ne rafraîchit pas les fragments
  • Mise à niveau du projet sur Android Studio 1.0 (problèmes de Gradle)
  • 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?

  • Erreur de connexion d'entrée Android
  • ANDROID_HOME n'est pas défini et la commande "Android" n'est pas dans votre PATH Phonegap
  • Android Stretch colonnes uniformément dans un TableLayout
  • "Impossible d'ouvrir le périphérique de journal" / dev / log / main ': Aucun fichier ou répertoire "
  • Problème d'attachement multiple par courrier électronique sur HTC Thunderbolt
  • Comment effacer un ImageView dans Android?
  • 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.