Principe d'affichage du système Android

Couche d'application

Résumé du processus d'affichage Android: l'application Android met en cache les données après la mesure, la mise en page et le dessin, rend les données à l'écran d'affichage via SurfaceFlinger et actualise les données via le mécanisme de rafraîchissement Android. En d'autres termes, la couche application est responsable du dessin et la couche système est responsable du rendu. Les données à dessiner par la couche application sont transférées au service de la couche système via une communication interprocessus. Le service de la couche système met à jour les données à l'écran via le mécanisme de rafraîchissement.

Dans les trois étapes de dessin de chaque vue dans le principe de dessin, la mesure et la disposition sont récursives pour obtenir la taille et la position de la vue. Plus le niveau est profond, plus il y a d'éléments et plus cela prend du temps.

1.Measure
用深度优先规则递归得到所有试图(View)的宽、高;获取当前View的宽度childWidthMeasureSpec和高度childHeightMeasureSpec之后,
可以调用它的成员函数Measure来设置它的大小。如果当前正在测量的子视图child是一个视图容器,那么它又会重复执行操作,
直到它的所有子孙视图的大小都测量完成为止

2.Layout
用深度优先原则递归得到所有View的位置;当一个子View在应用程序窗口左上角的位置确定之后,再结合它在前边测量过程中确定的宽度和高度,就可以完全确定它在应用程序窗口中的布局。

3.Draw
目前Android有两种绘制方式,软件绘制CPU与硬件加速GPU,GPU的显示和绘制效率远高于CPU,但也有缺点:耗电,兼容问题,内存大(使用openGL的接口至少需要8MB内存)

Couche système

Rendre vraiment les données qui doivent être affichées à l'écran, un
processus simple réalisé via le service SufaceFlinger

1. En réponse aux événements du client, créez une couche pour établir une connexion avec la surface du client

2. Acceptez les données et les attributs des clients, modifiez les attributs des calques, tels que la taille, la couleur, la transparence, etc.

3. Actualisez le contenu du calque créé à l'écran

4. Maintenez la séquence des calques et effectuez des calculs de recadrage pour la sortie finale des calques

Dans le système d'affichage d'Android, la mémoire partagée anonyme d'Android est utilisée: SharedClient, un SharedClient est créé entre chaque application et SurfaceFlinger, et jusqu'à 31 SharedBufferStacks sont créés dans chaque SharedClient, et chaque Surface correspond à un SharedBufferStack, qui est une fenêtre . En même temps, chaque SharedBufferStack contient deux ou trois tampons et surfaceFlinger restitue les données du tampon à l'écran au niveau de la couche du pilote.

FPS

Cela signifie que le nombre d'images transférées par seconde. Les personnes âgées parlent souvent d'envoyer un signal VSYNC à 16 ms pour déclencher le rendu de l'interface utilisateur. C'est 60FPS. Si vous le dépassez, vous perdrez des images et vous sentirez que l'image n'est pas lisse. De nombreuses unités de dessin, il se peut que l'animation soit exécutée trop de fois

La cause profonde de Caton

Il y a deux aspects principaux

1.绘制任务太重,绘制一帧的内容耗时太长
2.主线程太忙,导致VSYNC信号来的时候还没准备好数据导致丢帧

Travail principal du fil principal

1.UI生命周期控制
2.系统事件处理
3.消息处理
4.界面布局
5.界面绘制
6.界面刷新
除了这些之外,其他活尽量避免让主线程去干

Je suppose que tu aimes

Origine www.cnblogs.com/yinyulong/p/12702272.html
conseillé
Classement