<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/xuwei9</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; xuwei9]]></copyright><item><title><![CDATA[Android Task查找流程]]></title><link>https://blog.youkuaiyun.com/xuwei9/article/details/162007125</link><guid>https://blog.youkuaiyun.com/xuwei9/article/details/162007125</guid><author>xuwei9</author><pubDate>Mon, 15 Jun 2026 16:19:54 +0800</pubDate><description><![CDATA[这里再次请求了VoiceReceiverActivity，但是此时爱奇艺task被转移到了另外一个屏幕，导致findtask时，在目标屏幕中就没有找到mIdealRecord和mCandidateRecord，在另外一个屏幕查找时，也没有找到mIdealRecord，导致系统又新创建了一个爱奇艺的task实例，此时出现了一个用户打开了两个不同爱奇艺实例。这种通过taskAffinity查找的方式找到的mCandidateRecord仅限于在请求启动的目标屏幕中task列表查找。]]></description><category></category></item><item><title><![CDATA[自动化测试出现Android主屏画面无应用问题，底部栏正常，启动其它应用正常]]></title><link>https://blog.youkuaiyun.com/xuwei9/article/details/159763533</link><guid>https://blog.youkuaiyun.com/xuwei9/article/details/159763533</guid><author>xuwei9</author><pubDate>Thu, 02 Apr 2026 15:05:53 +0800</pubDate><description><![CDATA[通过现场dump的surfaceflinger可以看到，UsbMainActivity的ActivityRecord已经被创建出来了，而且处于显示状态，但是ActivityRecord下面没有任何child，因为APP没有创建出来。分析原因是系统启动A应用时，ATMX会将前台的B应用退出，但是B退出后，A一直没有创建成功，导致前台没有应用显示，而wait会一直持续，因为它不是由于用户点击无响应导致的，所以没有实际发生ANR。]]></description><category></category></item><item><title><![CDATA[Perfetto trace使用技巧]]></title><link>https://blog.youkuaiyun.com/xuwei9/article/details/159496333</link><guid>https://blog.youkuaiyun.com/xuwei9/article/details/159496333</guid><author>xuwei9</author><pubDate>Thu, 26 Mar 2026 10:32:40 +0800</pubDate><description><![CDATA[4.通过追踪GPU Completion定位应用卡顿的时间点，60HZ的屏幕一帧的时间为16.6ms左右，应用的GPU Completion表示该帧在绘制指令结束之后多长时间GPU完成了该帧，如果绘制指令的时间+GPU Completion时间超过了16.6ms，那么就会出现丢帧，当丢帧较多时，在屏幕上很容易看到卡顿。部分机型抓取过长的trace会导致解析出错，从而无法分析，在大部分机型上可以使用5-10秒长度，过长过大的trace通常也不利于分析。]]></description><category></category></item><item><title><![CDATA[Android悬浮窗口SurfaceControl移动position无效问题]]></title><link>https://blog.youkuaiyun.com/xuwei9/article/details/156067930</link><guid>https://blog.youkuaiyun.com/xuwei9/article/details/156067930</guid><author>xuwei9</author><pubDate>Fri, 19 Dec 2025 11:04:27 +0800</pubDate><description><![CDATA[所以到这里就明白了，在Android图形框架下，最底下的拥有bufferqueue的数据层layer是不能够设置position和scale参数的，那么它的位置应该怎么来控制呢，就需要在它的parent中来修改。发现设置的position参数，没有生效，但是设置alpha 0.5是生效了，说明position参数被忽略了，于是到surfaceflinger源码中进一步查找哪里的条件不满足导致参数被丢掉了。但是发现移动没有效果，但是设置alpha显示隐藏等参数是可以生效的。]]></description><category></category></item><item><title><![CDATA[退出分屏进入桌面闪现黑帧问题分析]]></title><link>https://blog.youkuaiyun.com/xuwei9/article/details/154773895</link><guid>https://blog.youkuaiyun.com/xuwei9/article/details/154773895</guid><author>xuwei9</author><pubDate>Thu, 13 Nov 2025 10:53:47 +0800</pubDate><description><![CDATA[分屏退出到桌面的过程应该是桌面启动到前台后，分屏就退出到后台消失，这里已经收到了main和side stage的task不可见，那么说明桌面已经启动了，就可以正常交接了，但是hide后，发现底下却没有任何图层，在trace中继续向后寻找几帧后，找到了桌面layer，说明桌面的启动速度要低于ATMS的预期。从trace上看，在两帧之间，发送了更新事务的有两个进程，分别是shortcut和systemui，进一步分析能够控制divider的进程只有分屏自己，所以应该是systemUI进程。]]></description><category></category></item><item><title><![CDATA[InputEventReceiver.finishInputEvent崩溃问题]]></title><link>https://blog.youkuaiyun.com/xuwei9/article/details/153469822</link><guid>https://blog.youkuaiyun.com/xuwei9/article/details/153469822</guid><author>xuwei9</author><pubDate>Fri, 17 Oct 2025 14:52:00 +0800</pubDate><description><![CDATA[查询到AOSP的用法实例frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/gesture/GenericGestureDetector.kt。怀疑是mWorkThread.getLooper()不是主线程导致的，替换了Looper.getMainLooper()再测试，就没有出现异常崩溃问题了。开发需求是监听所有屏幕的触摸事件，这样可以监听三指或者四指滑动的手势，做一些手势的动画。]]></description><category></category></item><item><title><![CDATA[runOnUiThread多线程乱序问题]]></title><link>https://blog.youkuaiyun.com/xuwei9/article/details/151213786</link><guid>https://blog.youkuaiyun.com/xuwei9/article/details/151213786</guid><author>xuwei9</author><pubDate>Wed, 15 Oct 2025 10:09:04 +0800</pubDate><description><![CDATA[但是出现一个问题，setDividerVisibility最后两次先后设置了false和true，对应先隐藏后显示，但是发现，出问题时总是隐藏执行后没有执行显示方法。通过源码发现execute如果发现是主线程就直接执行了，而不会post排队，所以虽然是后来的请求但是在主线程中调用，那么就会优先执行后面的请求。后面通过添加递增index打印发现，实际上都执行了，只是乱序执行了，先执行了显示，后执行了隐藏。那为什么和请求的顺序不一致呢。]]></description><category></category></item><item><title><![CDATA[XFTP无法打开的问题]]></title><link>https://blog.youkuaiyun.com/xuwei9/article/details/153041050</link><guid>https://blog.youkuaiyun.com/xuwei9/article/details/153041050</guid><author>xuwei9</author><pubDate>Sat, 11 Oct 2025 10:23:21 +0800</pubDate><description><![CDATA[b.杀xshell和xftp进程。删除缓存和配置文件夹后，启动成功。1.做过如下尝试无效。c.重新安装xftp。]]></description><category></category></item><item><title><![CDATA[adb push系统apk后，找不到新加的Service]]></title><link>https://blog.youkuaiyun.com/xuwei9/article/details/151993657</link><guid>https://blog.youkuaiyun.com/xuwei9/article/details/151993657</guid><author>xuwei9</author><pubDate>Tue, 23 Sep 2025 11:28:05 +0800</pubDate><description><![CDATA[然后将apk pull出来，反编译检查在AndroidManifest中是否有新加的service声明，发现都是正常的，并且新修改的代码都是生效的，但是就是新加的service就是找不到，无论是apk内部调用还是外部启动。push系统apk后，找不到新加的Service，手动调用start service后，一直提示找不到对应的service。如果直接 push 覆盖旧的 system APK，不重启是不会立刻生效的。最终发现，问题原因是在push apk跟install apk的流程区别。]]></description><category></category></item><item><title><![CDATA[如何签名Android系统应用]]></title><link>https://blog.youkuaiyun.com/xuwei9/article/details/151857847</link><guid>https://blog.youkuaiyun.com/xuwei9/article/details/151857847</guid><author>xuwei9</author><pubDate>Fri, 19 Sep 2025 10:40:42 +0800</pubDate><description><![CDATA[点击运行，就发现应用已经可以正常安装运行了，为了验证应用是否以系统应用身份运行可以检查sharedUserId是否生效。进入文件夹后发现有很多签名文件，但是Android studio需要jks，所以需要将源签名修改为JKS签名文件。至此，就得到了platform.jks，将其导入到Android studio项目中，配置gradle。准备写一个应用demo，调用一些系统内部接口，所以需要将UID设置为系统应用。然后使用Android studio安装运行，提示安装失败。]]></description><category></category></item><item><title><![CDATA[通过trace定位Android动画卡顿问题]]></title><link>https://blog.youkuaiyun.com/xuwei9/article/details/150414046</link><guid>https://blog.youkuaiyun.com/xuwei9/article/details/150414046</guid><author>xuwei9</author><pubDate>Fri, 15 Aug 2025 10:18:48 +0800</pubDate><description><![CDATA[生产的buffer在GPU绘制完成后，作为消费端的surfaceflinger就会及时消费合成到framebuffersurface上，由于buffer是有限的，没有被及时绘制完成，或者没有被及时消费都会导致无法dequeue到空闲buffer，没有及时绘制完成一般可以从GPU绘制耗时方面分析，而没有及时消费可以从surfaceflinger进程来分析。上图可与看到hwc同样时间点耗时在了validateDisplay的锁中，至此，我们可以分析出动画卡断的原因来自hwc。adb将文件pull出来后，使用。]]></description><category></category></item><item><title><![CDATA[Android Display显示屏ID上报流程]]></title><link>https://blog.youkuaiyun.com/xuwei9/article/details/150351979</link><guid>https://blog.youkuaiyun.com/xuwei9/article/details/150351979</guid><author>xuwei9</author><pubDate>Wed, 13 Aug 2025 18:34:10 +0800</pubDate><description><![CDATA[3.HWComposer通过port来构造physicalDisplayID，而port就来自于hwcdisplayID，所以结论是UniqueID = "local:"+ physicalDisplayID = "local:"+ hwcdisplayID。1.hwc在收到SF注册callback后遍历DRM的drmconnector，每一个connector代表一个显示器设备，然后将connector的displayid作为hwcdisplayID回调给surfaceflinger。]]></description><category></category></item><item><title><![CDATA[通过dump surfaceflinger快速定位view异常消失问题]]></title><link>https://blog.youkuaiyun.com/xuwei9/article/details/150272344</link><guid>https://blog.youkuaiyun.com/xuwei9/article/details/150272344</guid><author>xuwei9</author><pubDate>Tue, 12 Aug 2025 15:56:18 +0800</pubDate><description><![CDATA[至此完成了标记layer不可见的流程。在visible layer中确实没有看到StageCoordinatorSplitDivider，也没有看到有其它的layer占据了它的region，于是dump了一份正常显示divider时的layer信息，也没有发现明显异常。code流程其实很简单，app通过Java设置了hide flag给到transiaction，apply设置到surfaceflinger，该flag最终保存在RequestedLayerState的flags中。]]></description><category></category></item><item><title><![CDATA[ Android Nuplayer VideoFrameScheduler原理分析]]></title><link>https://blog.youkuaiyun.com/xuwei9/article/details/145873627</link><guid>https://blog.youkuaiyun.com/xuwei9/article/details/145873627</guid><author>xuwei9</author><pubDate>Wed, 26 Feb 2025 16:18:18 +0800</pubDate><description><![CDATA[实现了PLL算法，这个算法的核心是将两个频率不同的信号咬合，正常情况下如果源信号和目标信号是相同或者倍数关系，比如屏幕是60HZ，Video帧率是30fps，那么显示节奏就很简单，2个vsync对应一帧Video，那如果屏幕仍然是60HZ，Video是24fps，那么显示节奏就没有那么均匀了，Video是41.6ms一帧，屏幕是16.6ms一个vsync，看起来两个频率不一致的齿轮会没办法咬合。：vsync发生的周期，例如60HZ屏幕下，vsync的周期固定就是16.6ms。]]></description><category></category></item><item><title><![CDATA[Android系统Video显示流程]]></title><link>https://blog.youkuaiyun.com/xuwei9/article/details/145870767</link><guid>https://blog.youkuaiyun.com/xuwei9/article/details/145870767</guid><author>xuwei9</author><pubDate>Wed, 26 Feb 2025 11:08:17 +0800</pubDate><description><![CDATA[这里稍微介绍下，RenderEngine的backend实现是用Skia，Skia作为跨平台的渲染引擎，支持了所有主流的硬件图形引擎，包括OpenGLES、OpenGL、Vulkan、D3D以及Metal等，在不同的OS平台上可以自动加载或者手动选择合适的backend。DPU是显示单元的合称，不同于GPU是单个整体大IP核，DPU是一个与显示链路相关的IP核的集合，负责硬件级别的显示合成、各类HDR的支持，动态或静态PQ的优化，以及最终的驱动上屏。2.DPU合成显示，对应HWC中Device合成方式。]]></description><category></category></item><item><title><![CDATA[远程摄像头]]></title><link>https://blog.youkuaiyun.com/xuwei9/article/details/122779013</link><guid>https://blog.youkuaiyun.com/xuwei9/article/details/122779013</guid><author>xuwei9</author><pubDate>Thu, 03 Feb 2022 21:31:41 +0800</pubDate><description><![CDATA[本政策仅适用于许伟的远程摄像头产品。

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

1.适用范围

a)在您使用本]]></description><category></category></item><item><title><![CDATA[批发记账本软件隐私政策]]></title><link>https://blog.youkuaiyun.com/xuwei9/article/details/121499964</link><guid>https://blog.youkuaiyun.com/xuwei9/article/details/121499964</guid><author>xuwei9</author><pubDate>Tue, 23 Nov 2021 18:48:49 +0800</pubDate><description><![CDATA[本政策仅适用于许伟的批发进销存产品。

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

1.适用范围

a)在您使用本]]></description><category></category></item><item><title><![CDATA[在主机上用GDB远程调试板卡程序]]></title><link>https://blog.youkuaiyun.com/xuwei9/article/details/20840887</link><guid>https://blog.youkuaiyun.com/xuwei9/article/details/20840887</guid><author>xuwei9</author><pubDate>Thu, 29 Aug 2019 16:48:38 +0800</pubDate><description><![CDATA[首先从网上下载一份gdb源码程序下来，网址为http://ftp.gnu.org/gnu/gdb/。

 接下来，步骤很简单。

 1.编译gdb源码


./configure --target=arm-linux
make

 这里之所以用--target，是因为这里编译出来的gdb程序是供ubuntu主机使用的，但是调试的对象即target是arm板，所以这里的配置...]]></description><category></category></item><item><title><![CDATA[视频叠加文字]]></title><link>https://blog.youkuaiyun.com/xuwei9/article/details/52452598</link><guid>https://blog.youkuaiyun.com/xuwei9/article/details/52452598</guid><author>xuwei9</author><pubDate>Thu, 29 Aug 2019 16:48:22 +0800</pubDate><description><![CDATA[视频叠加文字功能分为以下两个功能模块：

1.在原始YUV数据图像的制定坐标叠加指定大小矩形YUV图像

2.绘制文字YUV矩形图形



首先，计算出指定字体大小的绘制文字所需要的像素点图像寛高w,h，然后在需要叠加的原始图像yuv_src上的指定坐标上抠出对应寛w,高h的矩形图像yuv_dst，接着，在yuv_dst上绘制文字，绘制完成后将yuv_dst叠加到原始位置。



需要用到的库...]]></description><category></category></item><item><title><![CDATA[bug笔记]]></title><link>https://blog.youkuaiyun.com/xuwei9/article/details/52699694</link><guid>https://blog.youkuaiyun.com/xuwei9/article/details/52699694</guid><author>xuwei9</author><pubDate>Thu, 29 Sep 2016 10:37:27 +0800</pubDate><description><![CDATA[1.gethostbyname在网络状况不好或者DNS服务器通信异常时经常会出现阻塞，并且阻塞时间很长，客户使用的一个定制SIM卡通信就会经常出现这个情况，所以对该函数的调用需要异步，必要时需要加上超时时间。]]></description><category></category></item></channel></rss>