216 votes

Android : Différence entre SurfaceView et vue ?

Quand est-il nécessaire ou préférable d’utiliser un SurfaceView au lieu d’une vue ?

216voto

Niko Gamulin Points 18058

Vues sont toutes tirées sur le même thread de GUI qui est également utilisé pour toute intervention de l’utilisateur.

Donc si vous devez mettre à jour GUI rapidement ou si le rendu prend trop de temps et affecte l’expérience utilisateur puis utiliser SurfaceView.

106voto

Ralphleon Points 1941

Quelques choses que j'ai noté:

  • SurfaceViews contenir un joli rendu mécanisme qui permet aux threads de mise à jour de la surface de contenu, sans l'aide d'un gestionnaire (bon pour l'animation).
  • Surfaceviews ne peut pas être transparent, elles ne peuvent apparaître derrière d'autres éléments dans la vue de la hiérarchie.
  • J'ai trouvé qu'ils sont beaucoup plus rapides pour l'animation que le rendu sur une Vue.

Pour plus d'informations (et un excellent exemple d'utilisation) reportez-vous à la LunarLander projet dans le SDK 'exemples de la section.

84voto

pierr Points 9148

mise à jour 05/09/2014

OK. Nous avons document officiel maintenant. Elle parlait tout ce que j'ai mentionné, dans une meilleure façon.


Lire plus détaillée ici.

Oui, la principale différence est surfaceView peut être mis à jour sur le thread d'arrière-plan. Cependant, il y a plus de vous peut-être.

  • surfaceView a consacrer surface tampon alors que tout le point de vue de partager l'une de la surface de la mémoire tampon allouée par ViewRoot. En un mot, surfaceView coût de plus de ressources.

  • surfaceView ne peut pas être accéléré par le matériel (comme des JB4.2) alors que 95% des opérations normales de Vue sont HW accéléré en utilisant openGL ES.

  • Plus de travail doit être fait pour créer vos propres surfaceView. Vous avez besoin d'auditeur à la surfaceCreated/Événement de destruction, de créer un thread de rendu, plus important encore, synchronisé, le thread de rendu et le thread principal. Toutefois, pour personnaliser la Vue, tout ce que vous devez faire est de remplacer onDraw méthode.

  • Le calendrier de mise à jour est différent. Affichage Normal mécanisme de mise à jour est contrainte ou contrôlée par le cadre:Vous appelez view.invalidate dans le thread de l'INTERFACE utilisateur ou view.postInvalid dans d'autres thread pour indiquer au cadre que la vue doit être mis à jour. Cependant, la vue ne sera pas mis à jour immédiatement, mais attendre jusqu'à la prochaine VSYNC événement est arrivé. L'approche facile à comprendre VYSNC est de la considérer comme une minuterie qui enflamme toutes les 16 ms pour un 60fps écran. Dans Android, tous la vue normale de mise à jour (et d'affichage, effectivement, mais je ne vais pas parler de ça aujourd'hui), est synchronisé avec le VSYNC pour obtenir une meilleure fluidité. Maintenant,retour à la surfaceView, vous pouvez vous rendre à tout moment que vous le souhaitez. Cependant,je ne peux pas dire si c'est un avantage, car l'affichage est également synchronisé avec VSNC, comme indiqué précédemment.

49voto

jcoder Points 14982

La principale différence est que SurfaceView peut être dessiné par des theads d'arrière-plan mais que Views ne peut pas. Ils utilisent cependant plus de ressources, donc vous ne voulez pas les utiliser, sauf si vous devez le faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X