自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(19)
  • 收藏
  • 关注

原创 退出分屏进入桌面闪现黑帧问题分析

分屏退出到桌面的过程应该是桌面启动到前台后,分屏就退出到后台消失,这里已经收到了main和side stage的task不可见,那么说明桌面已经启动了,就可以正常交接了,但是hide后,发现底下却没有任何图层,在trace中继续向后寻找几帧后,找到了桌面layer,说明桌面的启动速度要低于ATMS的预期。从trace上看,在两帧之间,发送了更新事务的有两个进程,分别是shortcut和systemui,进一步分析能够控制divider的进程只有分屏自己,所以应该是systemUI进程。

2025-11-13 10:53:47 626

原创 InputEventReceiver.finishInputEvent崩溃问题

查询到AOSP的用法实例frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/gesture/GenericGestureDetector.kt。怀疑是mWorkThread.getLooper()不是主线程导致的,替换了Looper.getMainLooper()再测试,就没有出现异常崩溃问题了。开发需求是监听所有屏幕的触摸事件,这样可以监听三指或者四指滑动的手势,做一些手势的动画。

2025-10-17 14:52:00 198

原创 runOnUiThread多线程乱序问题

但是出现一个问题,setDividerVisibility最后两次先后设置了false和true,对应先隐藏后显示,但是发现,出问题时总是隐藏执行后没有执行显示方法。通过源码发现execute如果发现是主线程就直接执行了,而不会post排队,所以虽然是后来的请求但是在主线程中调用,那么就会优先执行后面的请求。后面通过添加递增index打印发现,实际上都执行了,只是乱序执行了,先执行了显示,后执行了隐藏。那为什么和请求的顺序不一致呢。

2025-10-15 10:09:04 124

原创 XFTP无法打开的问题

b.杀xshell和xftp进程。删除缓存和配置文件夹后,启动成功。1.做过如下尝试无效。c.重新安装xftp。

2025-10-11 10:23:21 159

原创 adb push系统apk后,找不到新加的Service

然后将apk pull出来,反编译检查在AndroidManifest中是否有新加的service声明,发现都是正常的,并且新修改的代码都是生效的,但是就是新加的service就是找不到,无论是apk内部调用还是外部启动。push系统apk后,找不到新加的Service,手动调用start service后,一直提示找不到对应的service。如果直接 push 覆盖旧的 system APK,不重启是不会立刻生效的。最终发现,问题原因是在push apk跟install apk的流程区别。

2025-09-23 11:28:05 217

原创 如何签名Android系统应用

点击运行,就发现应用已经可以正常安装运行了,为了验证应用是否以系统应用身份运行可以检查sharedUserId是否生效。进入文件夹后发现有很多签名文件,但是Android studio需要jks,所以需要将源签名修改为JKS签名文件。至此,就得到了platform.jks,将其导入到Android studio项目中,配置gradle。准备写一个应用demo,调用一些系统内部接口,所以需要将UID设置为系统应用。然后使用Android studio安装运行,提示安装失败。

2025-09-19 10:40:42 233

原创 通过trace定位Android动画卡顿问题

生产的buffer在GPU绘制完成后,作为消费端的surfaceflinger就会及时消费合成到framebuffersurface上,由于buffer是有限的,没有被及时绘制完成,或者没有被及时消费都会导致无法dequeue到空闲buffer,没有及时绘制完成一般可以从GPU绘制耗时方面分析,而没有及时消费可以从surfaceflinger进程来分析。上图可与看到hwc同样时间点耗时在了validateDisplay的锁中,至此,我们可以分析出动画卡断的原因来自hwc。adb将文件pull出来后,使用。

2025-08-15 10:18:48 746

原创 Android Display显示屏ID上报流程

3.HWComposer通过port来构造physicalDisplayID,而port就来自于hwcdisplayID,所以结论是UniqueID = "local:"+ physicalDisplayID = "local:"+ hwcdisplayID。1.hwc在收到SF注册callback后遍历DRM的drmconnector,每一个connector代表一个显示器设备,然后将connector的displayid作为hwcdisplayID回调给surfaceflinger。

2025-08-13 18:34:10 515

原创 通过dump surfaceflinger快速定位view异常消失问题

至此完成了标记layer不可见的流程。在visible layer中确实没有看到StageCoordinatorSplitDivider,也没有看到有其它的layer占据了它的region,于是dump了一份正常显示divider时的layer信息,也没有发现明显异常。code流程其实很简单,app通过Java设置了hide flag给到transiaction,apply设置到surfaceflinger,该flag最终保存在RequestedLayerState的flags中。

2025-08-12 15:56:18 192

原创 Android Nuplayer VideoFrameScheduler原理分析

实现了PLL算法,这个算法的核心是将两个频率不同的信号咬合,正常情况下如果源信号和目标信号是相同或者倍数关系,比如屏幕是60HZ,Video帧率是30fps,那么显示节奏就很简单,2个vsync对应一帧Video,那如果屏幕仍然是60HZ,Video是24fps,那么显示节奏就没有那么均匀了,Video是41.6ms一帧,屏幕是16.6ms一个vsync,看起来两个频率不一致的齿轮会没办法咬合。:vsync发生的周期,例如60HZ屏幕下,vsync的周期固定就是16.6ms。

2025-02-26 16:18:18 1107

原创 Android系统Video显示流程

这里稍微介绍下,RenderEngine的backend实现是用Skia,Skia作为跨平台的渲染引擎,支持了所有主流的硬件图形引擎,包括OpenGLES、OpenGL、Vulkan、D3D以及Metal等,在不同的OS平台上可以自动加载或者手动选择合适的backend。DPU是显示单元的合称,不同于GPU是单个整体大IP核,DPU是一个与显示链路相关的IP核的集合,负责硬件级别的显示合成、各类HDR的支持,动态或静态PQ的优化,以及最终的驱动上屏。2.DPU合成显示,对应HWC中Device合成方式。

2025-02-26 11:08:17 705

原创 远程摄像头

本政策仅适用于许伟的远程摄像头产品。远程摄像头尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务,本软件会按照本隐私权政策的规定使用和披露您的个人信息。但本软件将以高度的勤勉、审慎义务对待这些信息。除本隐私权政策另有规定外,在未征得您事先许可的情况下,本软件不会将这些信息对外披露或向第三方提供。本软件会不时更新本隐私权政策。您在同意本软件服务使用协议之时,即视为您已经同意本隐私权政策全部内容。本隐私权政策属于本软件服务使用协议不可分割的一部分。1.适用范围a)在您使用本

2022-02-03 21:31:41 105

原创 批发记账本软件隐私政策

本政策仅适用于许伟的批发进销存产品。批发进销存尊重并保护所有使用服务用户的个人隐私权。为了给您提供更准确、更有个性化的服务,本软件会按照本隐私权政策的规定使用和披露您的个人信息。但本软件将以高度的勤勉、审慎义务对待这些信息。除本隐私权政策另有规定外,在未征得您事先许可的情况下,本软件不会将这些信息对外披露或向第三方提供。本软件会不时更新本隐私权政策。您在同意本软件服务使用协议之时,即视为您已经同意本隐私权政策全部内容。本隐私权政策属于本软件服务使用协议不可分割的一部分。1.适用范围a)在您使用本

2021-11-23 18:48:49 242

原创 在主机上用GDB远程调试板卡程序

首先从网上下载一份gdb源码程序下来,网址为http://ftp.gnu.org/gnu/gdb/。 接下来,步骤很简单。 1.编译gdb源码./configure --target=arm-linuxmake 这里之所以用--target,是因为这里编译出来的gdb程序是供ubuntu主机使用的,但是调试的对象即target是arm板,所以这里的配置...

2019-08-29 16:48:38 533

原创 视频叠加文字

视频叠加文字功能分为以下两个功能模块:1.在原始YUV数据图像的制定坐标叠加指定大小矩形YUV图像2.绘制文字YUV矩形图形首先,计算出指定字体大小的绘制文字所需要的像素点图像寛高w,h,然后在需要叠加的原始图像yuv_src上的指定坐标上抠出对应寛w,高h的矩形图像yuv_dst,接着,在yuv_dst上绘制文字,绘制完成后将yuv_dst叠加到原始位置。需要用到的库...

2019-08-29 16:48:22 766

原创 bug笔记

1.gethostbyname在网络状况不好或者DNS服务器通信异常时经常会出现阻塞,并且阻塞时间很长,客户使用的一个定制SIM卡通信就会经常出现这个情况,所以对该函数的调用需要异步,必要时需要加上超时时间。

2016-09-29 10:37:27 151

原创 开发工具笔记

SecureCRT远程登录ubuntu时遇到home、end等功能按键不能用时需要进行如下配置Terminal Emulaqtion选项设置如下:Emulation(仿真终端):设置为LinuxSelect an alternate keyboard emulation(选择一个备用的键盘仿真):Linux设置完成后可以正常使用键盘功能区。ubuntu命令挂

2016-09-22 11:35:55 228

原创 warning: backslash and newline separated by space

在写下面代码时候出现警告提示: char m_SPS[256] = { 0x67, 0x64, 0x00, 0x28, 0xAD, 0x84, 0x05, 0x45, 0x62, 0xB8, 0xAC, 0x54, 0x74, 0x20, 0x2A, 0x2B, \ 0x15, 0xC5, 0x62, 0xA3, 0xA1, 0x01, 0x51, 0x58, 0xAE,

2014-03-12 10:40:22 481

原创 总线驱动模型——2.6.30中bus_id消失问题

struct device结构中的bus_id变为init_name,但是在初始化设置init_name的时候又不嫩直接赋值,在访问变量的时候也不能直接取得字符首地址。需要两个函数。char *dev_name(struct device *dev); //访问取得init_name的地址set_dev_name(struct device *dev,const char *fmt);

2013-04-04 10:09:57 482

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除