Quand est-il nécessaire ou préférable d’utiliser un SurfaceView au lieu d’une vue ?
Réponses
Trop de publicités?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.
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 ouview.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.