全志R16安卓首次开机视频无声音

    这段时间再处理全志R16的上的项目。运行的环境是安卓6.0.我们的系统需要实现开机视频。本身全志没有对R16进行开机视频的支持,从代码上看到大佬们写的开机视频支持的代码和网上搜出来的基本一致,看来大佬们的技术认知也是基本一致,表示无比的膜拜。此时仍然是非常完美的,开机视频正常播放。突然间发现首次开机居然没有开机声音,只有画面在转。重启之后的开机一切正常,画面和声音都有。这个到底是什么问题呢?为什么会出现这样的问题?
    出现问题了第一时间百度了一波,想想看看有没有可以借鉴的方法,但是并没有什么有效的发现。那么自己处理就抓个log来看看了。
 
一.log分析
1.通过串口工具抓了一波首次开机log,这里就不贴log了,只简单说下log中可能出现异常的地方。因为是没有音频播放,在log中找关于audio的部分。在log中找到两处audio_hw_primary: out_standby,同时发现Audio Service启动时间比out_standby都要晚。
2.再次通过串口工具抓取了一份重启后开机的log,和首次开机的log对比发现果然out_standby只有一个,Audio service 启动也不会晚于out_standby.
3.因为第二次开机能正常播放视频,理论上播放视频的部分应该是没问题的,问题应该是出现在Audio service启动晚。
 
二.结合代码分析
1.通过log分析,我们怀疑问题是出在Audio Service启动过晚,那么我们去查找Audio service是在哪里启动的。
在frameworks/base/services/java/com/android/server/SysetemServer.java中找到了Audio service的启动地方。
在代码中的startOtherServices()里面。这里有好多service的启动代码,
2.这么多的启动代码只能慢慢找,看看那个会比较耗时了。想想安卓首次开机什么会耗时呢,应用优化最耗时了。那么有了这个概念,就开始网上找了,果然在启动Audio Service之前找到了mPackageManagerService.performBootDexOpt(). 这个就是应用优化的代码了。想着应该是它在开机的时候耗了太长的时间,导致首次开机的时候播放音频失败了。
 
三.修改代码验证
1.把启动Audio Service的代码挪到应用优化代码之前(简单的查看了一下,移动看起来没啥影响),编译烧录之后开机发现听到一点点开机声音了,看来这个方向是对的了。应该是还有些细节没有处理好。
2.接着继续分析发现安卓启动后Init进程会启动surfaceflinger进程、zygote进程、service manager进程。其中播放开机动画的是在surfaceflinger进程中调用的startBootAnim()实现的。而Audio Service是zygote进程启动的system server进程中启动的。
4.编译烧录后,开机验证,视频声音正常输出,重启之后声音也正常输出。问题得到解决。
 
四.总结
    首先通过log得知是Audio service启动晚导致首次开机视频无声音,接着顺藤摸瓜,一路分析上去发现其实就是因为应用优化太耗时了,导致audio service启动晚。解决了Audio service启动晚的问题,开机视频无声音的问题就解决了。
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值