
Android显示系统
文章平均质量分 72
aaajj
求职中,欢迎联系
展开
-
[Android]从FLAG_SECURE禁止截屏看surface
在应用中,设置activity的flag为FLAG_SECURE就可以禁止截屏,截屏出来是黑色的,试验一下,原创 2024-11-03 13:34:33 · 892 阅读 · 0 评论 -
【Android】GraphicBuffer和ANativeWindowBuffer
看上去dequeueBuffer调用把数据保存到了ANativeWindowBuffer中,再通过GraphicBuffer的getSelf处理进行了转换,GraphicBuffer 和 ANativeWindowBuffer是什么关系呢,稍微看一下定义,就可以发现,可以把他们理解为一个东西,GraphicBuffer是surface的内存数据载体,但是,在Surface::lock方法获取内存信息时,在其父类ANativeObjectBase中,可以看到。原创 2024-10-09 20:43:46 · 571 阅读 · 0 评论 -
从创建AlertDialog发生crash的WindowManager$BadTokenException看Window和Surface
就这个调用,可以作为一个入口来理解绘图机制,WindowManager在这个过程中创建了Surface,WindowManager作为窗口的管理者出现在这里,其他的绘图处理就交给ViewRootImpl和SurfaceFlinger合成了,详细可参考。这个问题,只有设置了TYPE_APPLICATION_OVERLAY 就可以了,因为ViewRootImpl.setView里会判断type的值,对于不符合条件的,就抛出了异常。在service中,进行AlertDialog调用,如。这里重点关注这个堆栈。原创 2023-03-04 20:42:44 · 192 阅读 · 0 评论 -
【Android显示学习】UIThread和RenderThread
在进行绘制的时候,RenderThread是怎样被调起来进行渲染的呢,在这里,我们继续通过对一个知识点的学习来作为基础发散点,来认识整个流程,实现整个知识点的贯穿:一点一横长,一撇到南阳。在view的绘图方法onDraw(Canvas canvas)中,我们可以添加log和堆栈,可以发现,onDraw所在的线程就是主线程,onDraw是在UI线程中执行的,渲染则是另外处理的,了解了这个主干道,就可以有个大概认识,再去了解各细节。这里回顾下显示系统的经典示意图。......原创 2022-08-28 10:34:05 · 1171 阅读 · 0 评论 -
[Android显示学习]RenderThread渲染
android显示系统中的GPU处理的RenderThread渲染理解原创 2022-08-21 17:58:05 · 3291 阅读 · 0 评论 -
Android图形学习--从view的invalidate认识刷新VSYNC
参考资料:DJLZPPAndroidQ 图形系统(11)UI刷新,SurfaceFlinger,Vsync机制总结_DJLZPP的博客-优快云博客在以前的学习中,通过GraphicBuffer的传送和数据读写了解到数据的传送显示流程,没有涉及到画面的刷新,这里通过view的刷新来学习一下,在GLSurfaceView中,相关onDrawFrame方法会随着屏幕刷新而调用起来。在普通的view里面,通过调用invalidate方法来注册vsync信号,开始一帧画面的绘制,调用到onD原创 2022-04-09 12:28:03 · 782 阅读 · 0 评论 -
Android显示系统学习---多屏幕显示
由于水平有限,见解浅薄,欢迎加群760816094讨论交流。 在Android中,SurfaceFlinger进行layer图像合成的时候,如果有多个显示设备,每个显示设备上的显示图像是各自合成的,并不是直接复制的主屏幕画面。这就为多屏幕不同的显示提供了实现基础。常见的主屏幕和副屏幕(HDMI显示设备,虚拟显示设备)显示是一样的。如下所示,主屏幕 ...原创 2021-10-11 21:31:38 · 2228 阅读 · 0 评论 -
Android投屏到设备及图像设备投屏到手机方案
手机(Android)投屏到投影仪可以使用type-C转HDMI转换器,(需要手机硬件支持)也可以投到电脑上,电脑再使用HDMI等线缆连接到投影仪。手机投屏到电脑可以wifi投屏,或者scrcpy等方式,主要还是通过软件方式。也可以通过视频采集卡,看上去有些复杂,手机->type-C转HDMI转换器 -> 视频采集卡-> PC获取到数据后通过软件进行显示,游戏直播可以采用这样的方案。电脑投屏到手机这个需求不常见,一个场景是给维护人员连接没有显示器的主机设原创 2021-09-30 21:31:58 · 1600 阅读 · 0 评论 -
Android显示系统学习回顾
看Android的显示系统相关资料有一段时间了,内容很多,很杂,一直没有贯穿起来。很多资料写的比较难懂。太多的概念,太多的浮云,正所谓“总为浮云能蔽日,长安不见使人愁”。再看到开发者网站的简介时,似乎有所顿悟,图形 | Android 开源项目 | Android Open Source Project曾经通过获取surfaceFlinger中保存的各应用的GraphicBuffer来保存为图片,理解了GraphicBuffer的传送和使用,GraphicBuffer...原创 2021-09-12 16:40:05 · 259 阅读 · 0 评论 -
input系统学习----显示触摸(Show Touches)
原以为显示触摸(Show Touches)的圆点的实现方式和PointerLocationView类似,也是注册到WMS的PointerEventDispatcher里面,然后在input分发的时候,显示在一个view上。但其实不是这样,使用input tap 300 300 这样的注入点击进行测试,可以看到点击的坐标点,但是没有触摸图标。在前面说一下结论,显示触摸(Show Touches)的圆点是在inputReader里面处理好的,根本没有走InputDispatcher。这样就不会被...原创 2021-06-20 15:07:07 · 1101 阅读 · 0 评论 -
scrcpy学习--(2)屏幕获取
scrcpy的开发文档DEVELOP.md中,对屏幕获取的方法是轻描淡写的说了下,使用MediaCodeC的相关接口,关联屏幕surface对象,就可以获取屏幕数据了。https://github.com/Genymobile/scrcpy打不开的可以看这个https://gitee.com/mirrors/scrcpy/blob/master/DEVELOP.mdScreen video encodingThe encoding is managed byScreenEncoder..原创 2021-05-23 17:45:43 · 2521 阅读 · 0 评论 -
TaskSnapshot保存应用画面截图快照的处理过程
在前面讨论TaskSnapshot的时候,https://blog.youkuaiyun.com/aaajj/article/details/114208770我们知道TaskSnapshotController中也通过获取layer的方式获取了graphicBuffer,这样按recent按键的时候就可以看到每个应用的快照截图,并且保存了图像信息到手机data/system_ce/0/snapshots中,这样,手机重启后,点击recent任务按键,还可以看到关机前的任务快照截图这里我..原创 2021-04-24 15:51:50 · 2232 阅读 · 0 评论 -
surfaceflinger中traverseInZOrder调用流程
在SurfaceFlinger.cpp里可以看到很多 traverseInZOrder的调用,比如dumpsys的调用, mCurrentState.traverseInZOrder([&](Layer* layer) { layer->miniDump(result, hwcId); });还有status_t SurfaceFlinger::getLayerDebugInfo(std::vector<Laye...原创 2021-03-07 15:30:59 · 1087 阅读 · 0 评论 -
【Android】使用SurfaceControl.captureLayers获取应用图像Layer试验
在https://blog.youkuaiyun.com/aaajj/article/details/93653074https://blog.youkuaiyun.com/aaajj/article/details/102537628https://blog.youkuaiyun.com/aaajj/article/details/113076275里面讨论了从SurfaceFlinger中获取layer图像的一个试验采用的方法是直接获取GraphicBuffer,进而找到数据地址来获取图片进行保存,这样的操作.原创 2021-02-07 15:06:47 · 2172 阅读 · 1 评论 -
BufferQueue学习
在https://blog.youkuaiyun.com/aaajj/article/details/93653074https://blog.youkuaiyun.com/aaajj/article/details/102537628里面讨论了从SurfaceFlinger中获取layer图像的一个试验通过获取GraphicBuffer来进行处理的,在实际使用中,GraphicBuffer的管理和获取都是通过BufferQueue来进行的,这篇博客写的很好,关于BufferQueue的...原创 2021-01-24 13:11:53 · 985 阅读 · 2 评论 -
[Android]GraphicBuffer的传送接收例子
之前的介绍GraphicBuffer传送的内容中只是贴了几句代码,有小伙伴说要看看全部例子,因为代码写的比较乱,以前没有贴完整,现在还是贴出来吧,给需要的同学参考下,这个程序是一个binder服务端程序,其中myBinder的case 5是接收客户端发来的GraphicBuffer,再调用图片保存方法,图片保存的方法是仿照screencap源码的,这里创建了一个名为screenget的binder服务,是一个最基本的binder服务,注意,测试的时候需要关闭selinux,不然添加服务会出错.原创 2021-01-24 11:48:21 · 1753 阅读 · 3 评论 -
【Android】从SurfaceFlinger中获取各layer图片(4)再回顾
从SurfaceFlinger中获取各layer图片的试验可以加深对GraphicBuffer和Layer的理解。dumpsys SurfaceFlinger中打印的Slot信息中有GraphicBuffer的指针,可以帮助我们了解QueueBufferCore.这个试验最初的出发点是根据图像的存储内存,再获取到这个数据,通过保存为图片的直观形式展现出来。其实系统截图命令screenc...原创 2020-04-12 20:12:33 · 1342 阅读 · 0 评论 -
【Android】从SurfaceFlinger中获取各layer图片(3)总结回顾
在https://blog.youkuaiyun.com/aaajj/article/details/93653074https://blog.youkuaiyun.com/aaajj/article/details/102537628里面讨论了从SurfaceFlinger中获取layer图像的一个试验,这里再回顾下,应用的图像本质上是画在一个内存空间上,这个内存区是由SurfaceFinger创...原创 2020-03-28 13:57:42 · 1008 阅读 · 0 评论 -
【Android】从SurfaceFlinger中获取各layer图片(2)
在前面的【Android】从SurfaceFlinger中获取各layer图片(1)里面,提到通过获取surfaceFlinger中的GraphicBuffer结构中的共享内存的fd来达到访问图像数据的内存地址,进而实现访问对应的图像数据,理论上是可行的,但是实际处理会有问题,最终需要通过传送GraphicBuffer对象来达到这个目的。这里记录下探索过程LINUX/andr...原创 2019-10-13 20:51:16 · 1433 阅读 · 2 评论 -
【Android】从SurfaceFlinger中获取各layer图片(1)
Surfaceflinger进程提供一个入口来实现对各进程的surface画面进行合并处理,也就是说,Surfaceflinger进程中保存有各进程的图像,(即layer),这里尝试获取各layer图像数据,来加深对surface的理解。图像保存方法,参考screencap里的截屏实现,int writePNG(char* fileName, char*base, int w,...原创 2019-06-25 20:33:17 · 4011 阅读 · 0 评论 -
【Android显示系统初探】多屏显示Presentation的使用
Presentation通过指定displayID来决定显示在哪个屏幕上,这样就实现了多屏幕的显示(如果手机有多个显示设备),也就让不同的屏幕可以显示不同的画面,在只有一个显示设备的情况下,我们可以打开开发者选项中的设置来模拟多屏,进而来测试Presentation。在开发者选项的Drawing中有Simulate secondary displays开关打开后,在界面可...原创 2019-05-26 14:10:11 · 3502 阅读 · 1 评论 -
【Android显示系统初探】surface初相识
Android显示系统非常复杂,从早期版本演化至今有很大的变化和改进,所以从当前的版本直接去查看会很困难。初学者看到繁多的概念和类会感到无从下手。这里我们将从实践应用的方式来展开这一系列,试图对Android的显示系统进行窥探。Android应用通过surface绘图和SurfaceFlinger进行图像数据交互,Java层的surface绘图流程比较繁琐,这里我们直接通过一...原创 2019-05-26 14:00:15 · 945 阅读 · 2 评论