- 博客(117)
- 收藏
- 关注
原创 SystemUI中NavigationBar分析
将导航栏View添加到Window进行显示通过读取解析xml里config的图标排布信息,来创建对应的view如果设置了keycode,则将点击事件touch以keycode方式交由系统处理。
2025-02-07 17:16:02
1038
原创 高版本Android源码编译旧版本apk问题
原因:mk脚本指定了sdk_version: “current”,编译出来的targetVersion是源码版本,而旧版本app代码写法可能还没有适配新版本导致运行出现问题。解决方法:有下面两种。
2024-12-31 16:14:36
323
原创 app在源码中编译,mk和bp脚本写法
通过make可以编译成app或者共享库,全编之后,可以使用mm/mmm/mma命令来单编app,下面以源码中具体的例子来说明mk文件写法。
2024-12-19 21:44:51
270
原创 使用Android Compose+Media3+MVI开发的本地音乐播放器
效果:https://github.com/dongpingwang/Music/releases/tag/1.0.0。地址:https://github.com/dongpingwang/Music。
2024-09-18 14:16:22
449
原创 Map面试常见问题
在JDK1.8之前,HashMap内部采用数组+链表的结构来存储数据,数组是HashMap的主结构,而链表则是用来处理冲突的。如果有元素,则将该元素与索引位置处的元素形成链表,并比较两个元素的key值,如果key值相同,则将value值较大的元素放在链表的头,这样就可以保证每次遍历都能按照key值排序。如果数组的大小选择过小,会导致频繁的扩容操作,影响程序的性能;HashMap的实现使用了散列(hashing)技术,通过将键转化为数组的索引,可以在O(1)的平均时间复杂度内完成数据的插入、查找和删除操作。
2023-09-14 19:44:07
287
1
原创 List常见面试问题
ArrayList的扩容方法是grow(),它会获取到ArrayList中elementData数组的内存空间长度,然后扩容至原来的1.5倍。其中,ArrayList是基于数组实现的,LinkedList是基于链表实现的,Vector是基于数组实现的线程安全版本。Java中的List是一种存放有序的、可以重复的数据的集合,它允许重复元素的存在。List中的元素都有对应的一个序列号(索引)记录着元素的位置,因此可以通过这个序列号来访问元素。ArrayList不是线程安全的。
2023-09-06 11:17:07
599
原创 音量压低处理流程
我们在源码中进行全局搜索,应该是在/frameworks/base/services/core/java/com/android/server/audio/PlaybackActivityMonitor.java,我们接着看这个类。通过申请临时DUCK焦点可以压低其他在播放的音源,如源码中的注释,不会暂停其他在播放的音源,而是降低输出,在车载情景下,一般在地图导航或者语音播报的情景下会申请这个焦点。下面流程基于aosp9。
2023-08-02 20:30:29
452
原创 AudioFocus申请失败情形
最近在分析问题时,经常看到媒体应用出现申请音频焦点失败,导致状态异常的问题,因此总结一下出现该问题的一些情景。原生设计中,**通话中或者来电时,**申请音频焦点失败,需要关注下。下面是原生系统源码,逻辑比较简单。
2023-07-31 17:21:04
601
原创 注册外部的AudioPolicy,监听焦点变化
因此我们试一试可不可以利用这一点,来注册外部的AudioPolicy,进行焦点变化监听。幸运的是可以,并且AudioManager中提供了。在上面分发流程分析中,最终是在MediaFocusControl中进行处理的,在。方法中可以看到在执行焦点栈逻辑时会先执行AudioPolicy相关逻辑,可以通过反射来实现。
2023-07-26 16:51:30
374
原创 AudioFocus分发流程
在音视频app开发中一般会遵循音频焦点的机制,播放时申请音频焦点,丢失焦点后暂停播放,恢复焦点后继续播放等。尤其在车载开发时,涉及到三方应用和自研应用,导致经常出现音频焦点混乱混音等问题。整体是一个IPC调用流程,MediaFocusControl中维护了一个焦点栈,当栈数据发生变化时,会分发焦点状态给调用客户端。
2023-07-17 15:56:14
142
原创 如何查看声卡、pcm设备以及tinyplay、tinymix、tinycap的使用
只有PCM设备才有这部分,只有c和p两种。c代表capture,说明这是一个提供录音的设备,p代表palyback,说明这是一个提供播放的设备。设备的id,代表这个设备是声卡上的第几个设备。设备的ID只和驱动中配置的DAI link的次序有关。如果驱动没有改变,那么这些ID就是固定的。设备类型,通常只有comtrol/pcm这2种。从上图可以看到声卡会管理很多设备,PCM设备只是其中的一种设备。声卡的id,代表第几块声卡。通常都是0,代表第一块声卡。手机上通常都只有一块声卡。
2023-04-26 19:00:36
4876
原创 自己上传开源库到Maven
创建密钥,使用命令行操作示例,如下:(用gui操作默认密钥类型不是RSA and RSA,上传到服务器也有问题)提一个JIRA单,可以参考。密钥有分为私有密钥和公开密钥,配置gradle脚本。
2023-04-23 14:45:38
483
原创 c语言库api文档
Linux系统api文档:https://man7.org/linux/man-pages/dir_all_alphabetic.html。C语言标准库文档:https://swordair.com/docs/c-language-standard-library/
2023-04-17 01:48:29
546
原创 git-first-commit编译分析
git-v0.99版本,与现在的git比较接近,也是可以在ubuntu14上编译。编译环境:Ubuntu-14.0。修改Makefile。
2023-04-17 01:44:58
95
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人