SurfaceFlinger实战dump获取单个Layer图像方案学员改进成果

背景:

hi,粉丝朋友们:
在马哥课程的实战实现dump单个图层的发布后,很多学员朋友就纷纷享马哥要了相关源码,相关的链接请参考这里:

https://blog.csdn.net/learnframework/article/details/136323076

学员朋友们拿到后也进行了认真的实战开发,而且针对马哥提供方案也做了一些改进,下面就分享一下两个学员朋友等改进建议。

学员1改进方案:

以下是学员提出的一些意见:
在这里插入图片描述核心修改意见在于:
在这里插入图片描述
原来这里直接return 0,这里还是会影响其他dumpsys SurfaceFlinger带参数的命令会波及。
所以这个学员朋友就对这里进行了改进,减少波及:
在这里插入图片描述
这里就把dumpsys 命令放入达到了和–vsync等一样的扩展参数里面。

相对来说这样可以减少波及,更加规范化,符合公司里面正式上项目的标准。

还有一个就是名字dumpsys单个Layer时候需要完整的Layer名字的,但是每次的Layer名字重启或者销毁后都是不一样的,都需要进行重新获取Layer名字才可以可以截图。
改进方案:
字符由原来的全匹配变成模糊匹配部分匹配

方案可能存在缺陷:
完全有可能存在两个Layer名字上有较大的相似度,例如:
在这里插入图片描述明显可以看出来这里的MainActivity这个图层,就有一个SurfaceView和一个正常的Activity,如果只是以com.example.myapplication11.MainActivity这个字符串来进行匹配的话,那么你就无法确定到底截图是谁。

学员2改进方案:

改进背景出发点:
针对马哥的传递名字是通过dumpsys SurfaceFlinger方式传递,而且截图前还需要调用dumpsys SurfaceFlinger,感觉不那么方便,是否可以考虑改造成直接screencap一个命令进行传递相关Layer名字呢?需要在开始和结束时候调用相关的dumpsys SurfaceFlinger命令呢?

哈哈当然是可以,只不过修改模块就需要多一个模块,那就是sreencap.cpp这个源码

在这里插入图片描述

代码波及两个地方后,就可以实现让screencap时候传递对应的Layer名字既可以

总结:

感谢2位学员朋友在学习马哥课程时候,针对马哥的实战项目案例等,进行了实战,而且还是认真进行学习和改进,而且把它做成商业化的项目。这也是马哥最希望看到的,不希望大家拿着现成的代码或者patch,进行apply后编译通过,运行ok,就再也不管了。
实际上这种直接拿代码运行对于学员是非常不好,我还是建议大家老老实实跟着敲一边代码,不要偷懒,毕竟跟着做你才可以有自己思考,才会想出改进方案。

本文章更多详细代码和资料需要购买课程获取
hal+perfetto+surfaceflinger
https://mp.weixin.qq.com/s/LbVLnu1udqExHVKxd74ILg
在这里插入图片描述

私聊作者+v(androidframework007)

其他课程七件套专题:在这里插入图片描述
点击这里
https://mp.weixin.qq.com/s/Qv8zjgQ0CkalKmvi8tMGaw

视频试看:
https://www.bilibili.com/video/BV1wc41117L4/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值