web-dev-qa-db-fra.com

Android Accélération matérielle - à utiliser ou à ne pas utiliser?

Je suis en train de développer une application dont la fonctionnalité est très similaire à celle de Facebook Android application native: réseau social que la plupart du temps l'utilisateur passera dans un ListView sans fin affichant beaucoup d'images , entrer dans une galerie d'images, etc.

disons pour la discussion que je fais toutes les bonnes choses et les meilleures Android pratiques pour obtenir un défilement fluide (recyclage des vues comme il se doit, en utilisant différents types de vues si nécessaire, chargement en mémoire uniquement à l'échelle) bitmaps dans la taille requise, mise en cache des bitmaps, en utilisant le modèle de conception ViewHolder, ne pas bloquer le thread d'interface utilisateur lorsque cela est possible et ainsi de suite ...)

disons aussi que tout le reste de mon application écrit de la meilleure façon et en suivant les meilleures pratiques (pour la discussion ...: ->)

mon application ne fonctionne pas mal du tout à ce stade, mais lorsque vous activez l'accélération matérielle, comme décrit et promis dans documentation pour les développeurs Android, cela rend mon application beaucoup plus lisse et rapide.

disons que cela n'affecte en aucune manière nagative sur l'interface utilisateur comme cela peut arriver, et je n'effectue aucune des Opérations non prises en charge

selon le document de Google sur le sujet, la seule raison pour laquelle je peux voir de ne pas utiliser cette fonctionnalité (en plus de toutes les autres raisons que j'ai déjà mentionnées ci-dessus) est que cela peut amener mon application à utiliser plus de RAM. mais combien de RAM? beaucoup plus? Je sais que lorsque mon application consomme beaucoup de RAM - cela devient un bon candidat pour être détruit par le système d'exploitation quand il a besoin de libérer de la mémoire.

ma question est essentiellement -

  • est-ce "ok" dans mes circonstances d'utiliser cette fonctionnalité?
  • quels autres problèmes peuvent résulter de son utilisation?

TIA

40
Tal Kanel

Utiliser ou ne pas utiliser

Il est conseillé d'utiliser l'accélération matérielle uniquement si vous disposez de calculs personnalisés complexes pour la mise à l'échelle, la rotation et la traduction d'images, mais ne l'utilisez pas pour dessiner des lignes ou des courbes (et d'autres opérations triviales) ( source ).

Si vous prévoyez d'avoir des transitions communes et aussi étant donné que vous avez déjà envisagé la mise à l'échelle, le recyclage, la mise en cache, etc., cela peut ne plus avoir de sens de surcharger votre projet. De plus, tous les efforts consacrés à retravailler votre code pour prendre en charge l'accélération matérielle n'affecteront pas les utilisateurs sur les versions inférieures à 3.0, qui représentent environ 36% du marché au 8 mai 2013.

Mémoire

En ce qui concerne l'utilisation de la mémoire (selon cet article ), en incluant Android Matériel, l'application charge les pilotes OpenGL pour chaque processus, prend environ 2 Mo de mémoire et booste à 8 Mo.

Autres problèmes

Outre les versions API, je suppose que cela affectera également la durée de vie de la batterie. Malheureusement, il n'y a pas de référence sur différents cas d'utilisation en ligne afin de tracer une ligne sur celui-ci. Certains soutiennent que, dans certains cas, en raison de plusieurs cœurs de processeur, l'utilisation de l'accélération peut économiser la batterie. Dans l'ensemble, je pense qu'il serait sûr que l'effet ne soit pas trop dramatique (ou Google en aurait fait un point majeur).

37
ılǝ

[~ # ~] mise à jour [~ # ~]

L'accélération matérielle est activée par défaut si votre niveau d'API cible est> = 14


Je dirais oui dans votre cas, utilisez l'accélération matérielle.

Étant donné que vous n'utilisez aucun contrôle gourmand en ressources dans votre application, l'activation de l'accélération matérielle ne devrait pas poser de problème. Comme vous l'avez dit, votre application fonctionne assez bien sans accélération matérielle.

Lorsque vous activez l'accélération matérielle Android commencera à utiliser votre GPU et en raison des ressources accrues requises pour activer l'accélération matérielle, votre application consommera plus de RAM.


Une question fréquemment posée est La quantité de RAM augmentera-t-elle vraiment?

La réponse à cette question sera déterminée par:

1 . Votre capacité de programmation, c.-à-d. gestion de la liste de recyclage, mise à l'échelle des images ect.

2 . Le dispositif

Il y a quelque temps, j'ai écrit une application qui a été utilisée pour éditer des bitmaps de très haute résolution. J'ai rencontré le même problème. J'ai constaté que sur différents appareils, la quantité maximale de RAM allouée par le système d'exploitation lorsque l'accélération matérielle est activée varie selon l'appareil . Si votre appareil a plus de RAM, le système d'exploitation allouera plus de RAM à votre application, vous ne trouverez donc jamais une quantité cohérente de RAM utilisée pour votre application. Les appareils les plus gros et les plus chers exécuteront toujours votre application sur une plus grande quantité de RAM.


Quels autres problèmes peuvent survenir en utilisant l'accélération matérielle?

L'accélération matérielle peut entraîner des problèmes pour certaines opérations de dessin 2D. Si vous rencontrez ce problème, vous pouvez activer l'accélération matérielle uniquement pour des activités spécifiques dans votre application, comme indiqué sur le Accélération matérielle dans le Android Developer Docs

Le moyen le plus simple d'activer l'accélération matérielle consiste à l'activer globalement pour l'ensemble de votre application. Si votre application utilise uniquement des vues standard et Drawables, son activation globale ne devrait pas entraîner d'effets de dessin négatifs. Toutefois, l'accélération matérielle n'étant pas prise en charge pour toutes les opérations de dessin 2D, l'activer peut affecter certaines de vos applications qui utilisent des vues personnalisées ou des appels de dessin. Les problèmes se manifestent généralement sous la forme d'éléments invisibles, d'exceptions ou de pixels mal rendus. Pour y remédier, Android vous donne la possibilité d'activer ou de désactiver l'accélération matérielle aux niveaux suivants: Application, activité, fenêtre, vue

De cette façon, vous pouvez également limiter l'accélération matérielle de votre application, mais par le son, vous en aurez besoin pour la plupart des fonctions de vos applications.

J'espère que cela t'aides

13
Neil