自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(596)
  • 资源 (35)
  • 收藏
  • 关注

原创 Android性能分析——GPU资源耗尽分析(二十六)

本文分析了Android车机系统中GPU资源耗尽导致应用闪退的案例。通过日志定位到EGL_BAD_ALLOC错误,表明系统无法分配足够图形资源创建EGL上下文。问题主要发生在渲染线程初始化EGL环境时,根源在于车机系统对GPU资源的严格限制(如EGLContext数量、GPU内存等)。文中详细解读了SkiaOpenGLPipeline和EglManager的源码调用链路,指出createContext()函数中的致命断言是崩溃的直接原因,并提出了移除断言、增加重试机制、优雅降级等改进方案。该案例揭示了资源受

2025-12-29 10:15:21 468 2

原创 2025我的Android系统探索之旅

2025年技术创作总结:作者通过职业转型深入Android系统开发,以专栏写作驱动学习,创建了SystemUI、Input、多媒体、性能优化和编译系统5个专栏,全年发布145篇技术文章。这种"实践-输出"模式不仅帮助快速掌握新领域知识,还培养了系统性思维和技术表达能力。专栏内容因实用性和深度获得读者认可,作者也多次入选博客专家榜单。文章分享了如何将工作挑战转化为结构化知识,并强调技术社区互动带来的成长动力。展望未来,作者将继续深耕Android系统开发,与读者共同探索技术进步。

2025-12-29 09:51:14 766

原创 Android 蓝牙实战——蓝牙协议断开分析(二十六)

遇到这样一个问题,应用程序主动调用 A2dp 断开连接,但是蓝牙协议一直处于连接状态,并未执行断开操作,本文主要针对该问题进行详细解析。

2025-12-03 09:27:44 526

原创 Android Wifi——wpa_supplicant启动流程(二十二)

Android系统中的wpa_supplicant是Wi-Fi连接的核心组件,负责网络扫描、认证(支持WPA-Personal、WPA-Enterprise等协议)、关联、加密密钥生成等底层操作。它通过HIDL接口与上层系统通信,启动时会自动发现和配置网络接口,并创建对应的HIDL服务实例(如STA模式接口和P2P点对点接口)。该机制支持动态接口管理,实现了底层Wi-Fi功能与Android框架的模块化对接,为系统提供了稳定的Wi-Fi连接能力。

2025-12-03 09:27:09 700

原创 Android性能分析——Watchdog异常分析(二十五)

在次遇到了车机黑卡死问题,但是对于关键字 am_crash、am_anr 和 am_kill 都无效的情况的,又没有关键的 AndroidRuntime 日志的情况下,可以考虑 Watchdog 异常关键字进行查找。

2025-11-06 09:17:27 490

原创 Android性能分析——IO阻塞分析(二十四)

对于系统性能分析,多数都是黑卡死的问题,这里又是一个典型的系统卡死问题,用户车机开机后无法使用,点击多个应用均无法打开。

2025-11-06 09:17:08 400

原创 Android 性能优化——Binder对象超限分析(二十三)

​在 WiFi 专栏的《P2P状态变化广播》和《P2P状态变化回调》介绍了 P2P 连接异常的现象,但其影响范围也仅限于 WiFi P2P 功能,到后期发现该问题会导致系统黑屏卡死,因此决定将该问题的分析放到性能专栏。

2025-11-05 09:34:30 642

原创 Android Audio其他——音频相关模块(附)

针对 Android Audio FWK 开发来说,很多功能都是通过 APP 下发指令,然后经过 FWK 进行处理(有些功能直接透传),传递到 Hal 层(有时也算是 FWK 负责),最后传递到对应模块进行处理。

2025-11-05 09:33:08 410

原创 Android Audio实战——音频播放失败分析(十六)

文章摘要: 本文分析了车辆音频播放失败的硬件问题。通过日志排查发现,首次播放时音频流写入失败(错误码-5,I/O错误),暂停/恢复流程中因硬件故障导致mActiveTracks验证失败。最终确认问题根源为PCM设备层的硬件故障,导致音频数据读写异常,引发无声现象。案例表明,当出现I/O层错误时需优先排查硬件及驱动状态。

2025-11-04 09:20:30 809

原创 Android Audio基础——打开音频输出通道(二十七)

​上一篇文章介绍了创建音频 Patch 的相关流程,该流程的最后是需要打开对应的音频通道,并且在前面的文章《AudioFlinger回放录制线程》中也简单介绍过相关内容,这里我们就接着上面的内容继续深入分析。​

2025-11-04 09:20:14 829

原创 Android Audio基础——创建音频patch(二十六)

上一篇文章介绍了startAudioSource() 的最终核心作用就是创建音频 patch,音频 patch 其实就是 Android 音频系统中连接音频源和音频宿的虚拟通路,我们在 Radio 专栏中介绍过,Radio 的播放就是通过创建 Audio Patch 进行播放的,这里我们再次深入分析一下 Audio Patch 创建流程。

2025-11-03 11:14:30 613

原创 Android Audio基础——设置音频源类型(二十五)

在当今车载设备的多媒体体验中,音频播放质量直接影响着用户的整体感受。从简单的媒体播放到复杂的多设备音频路由,Android 音频系统面临着日益增长的挑战。然而,大多数开发者熟悉的 MediaPlayer 和 AudioTrack 只是这个庞大系统的"冰山一角"——它们提供了简单易用的播放接口,却隐藏了底层复杂的音频源管理机制。

2025-11-03 11:14:09 480

原创 Android Audio录音——AudioRecord回声消除(九)

在语音通话或录音场景中,回声(Acoustic Echo)通常是指说话的声音从对方的扬声器播放出来,又被对方的麦克风拾取,然后有被传回来,导致我们听到了自己延迟了一段时间的重复声音。

2025-10-16 09:17:19 1091

原创 Android Audio录音——Buffer释放流程(八)

通过前面的学习我们了解了 AudioRecord 录音焦点的抢占逻辑以及 obtainBuffer() 启动流程,这里我们来看一下 Buffer 的释放流程 releaseBuffer()。

2025-10-16 09:08:54 539

原创 Android Audio录音——obtainBuffer启动流程(七)

上一篇文章中介绍了在 AudioRecord 的 obtainBuffer() 函数中获取音频缓冲区,他与数据读取文章中介绍的 obtainBuffer() 函数并不相同,这里我们主要看一下获取音频缓冲区 obtainBuffer() 函数的启动流程。

2025-10-15 09:03:05 469

原创 Android Audio录音——录音通道切换重启(六)

上一篇文章我们已经分析出问题原因为 AudioRecord 启动失败导致了问题的出现,这一篇我们继续深入分析,看一下具体启动失败的原因。

2025-10-15 09:02:50 905

原创 Android Audio录音——重复创建录音通道(五)

上一篇问文章我们介绍了 AudioRecord 的录音基础,并且分析了 AudioRecord 调用 start() 的相关代码。这里正好遇到了一个 AudioRecord 录音异常的问题,我们来总结分析一下。

2025-10-14 09:12:57 403 1

原创 Android Audio录音——数据读取流程(四)

在 Android 系统中,使用 AudioRecord 录制音频的同时,还需要播放对应的音频内容,这需要实时读取对应的音频内容,AudioRecord 的 read() 方法就是获取录音数据的核心函数。

2025-10-14 09:11:16 484

原创 Android Audio录音——设置输入设备(三)

上一篇问文章我们介绍了 AudioRecord 的录音基础,并且分析了 AudioRecord 调用 start() 的相关流程,其实在开始录音前,我们还要设置对应的录音硬件设备,这里我们就来分析一下录音设备的切换流程。

2025-10-13 09:19:22 903 2

原创 Android Audio录音——录音开始流程(二)

上一篇文章简单介绍了 AudioRecord 基础以及音频录制流程,这里我们主要从源码上看一下 AudioRecord 的录制启动流程。

2025-10-13 09:18:10 642

原创 Android 车联网——车载仪表屏开发(二十六)

通常汽车启动后需要快速显示仪表,而车载娱乐系统所在的Android系统,启动是比较耗时的,所以通常仪表系统会做在一个小型轻量化的系统内,从而达到快速启动的效果,最终实现汽车一发动,就立刻能显示出仪表必须显示的各项内容。

2025-09-11 09:10:31 464

原创 Android 车联网——多屏多用户操作(二十五)

基于上一篇的分析,我们可以利用 Android 原生的多用户机制和 Profile 子用户机制,在 Android 11 上实现在不同子用户中安装不同的应用,并显示在不同的屏幕上,来达到一种多屏与多用户绑定的效果,不同使用者在各自的屏幕上独立操控应用。

2025-09-11 09:09:25 622

原创 Android 车联网——多屏多用户基础(二十四)

基于 Android 11 Automotive 源码,结合原生多用户框架和多屏框架的特点,实现多个屏幕与多个用户一一绑定,达到不同用户可以在多个屏幕上同时操作任意应用的效果。

2025-09-10 09:11:18 964

原创 Android性能分析——应用异常退出分析(二十二)

遇到一个应用异常退出的问题,由于最终的分析结论是应用内存泄漏造成的,所以将该问题划分到性能分析模块。这里就分享一下该问题的整个分析流程。

2025-09-10 09:10:35 1139

原创 Android性能优化——渲染线程优化(二十一)

上一篇文章既然分析出问题的关键因素就是空指针问题,这里我们就针对源码进行分析,避免空指针导致的异常出现。

2025-09-09 09:22:11 1029

原创 Android性能分析——渲染线程空指针(二十)

接着上一篇继续分析,虽然前面通过暂停视频播放来减少渲染资源的消耗,在一定程度上缓解了问题的出现,但当后台打开多个应用时,问题又出现了。这里我们再次深入分析该问题的异常原因。

2025-09-09 09:21:54 833

原创 Android性能分析——渲染线程异常(十九)

又是一个黑卡死的问题,Android 桌面启动一个小窗口 Activity 播放视频,同时切换白天/黑夜模式,出现黑屏卡死现象。

2025-09-08 09:14:22 772

原创 Android性能优化——OMX服务异常优化(十八)

在 Android 开发中,OMX 服务(OpenMAX Integration Layer Service)是多媒体框架的核心组件之一,负责管理与硬件加速的多媒体编解码器(Codec)的交互。它是上层媒体框架(如MediaCodec、Stagefright)与底层硬件编解码器之间的桥梁。

2025-09-08 09:13:37 694

原创 Android性能分析——CPU火焰图介绍(十七)

火焰图(Flame Graph)是一种用于性能分析的可视化工具,它主要用于展示程序运行过程中的函数调用层次结构以及各个调用栈占用的时间比例,从而帮助开发者快速识别性能瓶颈。

2025-08-14 09:16:19 894

原创 Android实战——系统时间自动同步

在移动设备和物联网时代,准确的时间同步对现代操作系统至关重要。Android 作为全球主流的移动操作系统,其时间管理机制不仅影响基础功能(如日志记录、定时任务、证书验证等),还直接关系到用户体验(如消息时间戳、日历事件、定时提醒等)。

2025-08-14 09:16:01 753

原创 Android AMS实战——Activity结束分析(二)

上一篇文章介绍了 APP 进程异常结束 recent-task-trimmed 流程分析,对于进程的结束还有很多其他情况,了解进程结束的关键字信息,就可以快速定位问题的关键点,这里我们就来简单介绍一下 Activity 结束的关键日志。

2025-08-13 09:20:56 644

原创 Android AMS实战——服务异常分析(一)

服务异常挂掉,发现是 bind 的 Activity 结束了当前界面,但并非应用主动触发 finish。这里就通过该场景分析 Activity finish 流程。

2025-08-13 09:20:40 462

原创 Android Audio其他——音效文件加载(二)

上一篇文章介绍了按键音播放流程的整个链路,在最后的音效播放前有一个异步加载操作,这里我们就来看一下音效资源文件的加载流程。

2025-08-12 09:35:55 783

原创 Android Audio其他——按键音播放流程(一)

在我们日常使用Android设备的过程中,每一次按键操作——无论是点亮屏幕、调节音量,还是输入文字——往往都伴随着清脆或柔和的“滴答”声。这些看似微不足道的提示音,不仅提供了即时的操作反馈,增强了交互的确定性,也潜移默化地塑造着用户对系统响应速度和品质的感知。它们就是 Android 系统中无处不在的按键音(Key Tones)。

2025-08-12 09:35:38 850

原创 Android Audio音量——音量设置flags(十一)

在 Android 音频系统中,设置音量时可以使用各种 flags 来控制音量调整的行为。这些 flags 主要用在 AudioManager 类的 setStreamVolume()、adjustStreamVolume() 和 adjustVolume() 等方法中。

2025-08-11 09:45:40 699

原创 Android Audio实战——获取活跃音频类型(十五)

在 Android Audio 开发中,很多场景需要获取当前正在播放的音频类型,而在音频管理器 AudioManager 中并没有发现类似的接口,这一篇文章就来看一下实现获取活跃音频类型的方式。

2025-08-11 09:45:18 877

原创 Android Audio实战——死锁案例解析(十四)

前两篇文章解析了一个 audioserver 异常崩溃的问题,同时也了解到 TimeCheck 超时崩溃处理音频硬件或驱动无响应的情况外,还有死锁也可能导致 TimeCheck 超时。

2025-07-31 09:31:04 541

原创 Android Audio实战——TimeCheck机制解析(十三)

上一篇文章我们虽然通过 tombstoned Log 推断出 audioserver 崩溃的原因就是系统调用内核接口时发生阻塞,导致 TimeCheck 检测超时异常而崩溃,但并没有实质性的证据证明是 kernel 层出现问题导致的崩溃,因此这里我们继续看一下 TimeCheck 的检测原理。

2025-07-31 09:30:47 629

原创 Android Audio实战——音频输出设备异常(十二)

这是一个 CarService 崩溃的问题,外在表现就是黑屏卡死,对于车机系统 CarService 服务的崩溃,遇到什么样的外在表现都不足为奇,现在我们就来分析一下整个流程,这里跟随项目需求使用了Android 9.0 的源码分析。

2025-07-30 09:20:23 710

原创 Android Audio实战——音频Xrun问题处理(十一)

在 Android  音频处理系统中,音频过载(overrun)和不足(underrrun)是常见问题,两者统称为 Xrun。音频过载 Overrun 通常由于当音频数据生产速度超过消费速度时发生,导致数据丢失。音频不足 Underrun 是指当音频数据消费速度超过生产速度时发生,导致播放中断或静音。

2025-07-30 09:19:55 1396

Android仿百度贴吧看帖滑动返回效果

实现百度贴吧看帖时的滑动返回效果和AutoCompleteTextView的使用。

2015-04-14

手势识别实现

文件中包含两种实现手势识别功能的工程,一种是使用GestureDetector实现手势识别,另一种是使用GestureOverlayView实现手势识别。

2015-02-26

页面跳转与数据回传

页面跳转与数据回传,跳转方法startActivityForResult的使用与返回数据的处理。

2015-02-16

滚动选择控件

自定义日期滚动选择控件,代码使用方便,而且可以通过修改自定义Dialog中代码控制日期可选范围和添加时间选择功能等。

2015-08-25

竖直滚动TextView

很简单的文本信息竖直滚动展示效果,没有积分的可以搜索“Android TextView竖直滚动文字广告效果”的博客。

2016-01-18

进度条简单使用和自定义

进度条简单使用和自定义进度条显示风格,代码比较简单,注释详细,适合初学者。

2015-01-16

ContentProvider测试Demo

ContentProvider的测试Demo,只有下载并运行http://download.csdn.net/detail/c19344881x/8360531下的应用才会看到效果。单独下载没有用处。

2015-01-14

ScorollView简单使用

主要ScorollView简单使用方法,包括滑动监听、滑动加载、位置跳转等功能。适合初学者研究使用,注释非常详细。

2015-01-23

ViewPager简单使用

主要介绍ViewPager的简单使用和三种Adapter的区别,适合初学者学习使用。

2015-01-21

日期时间选择

日期时间选择控件的使用,包括嵌入Activity中和弹出式两种情况,适合初学者,代码注释比较详细。

2015-01-16

断点续传下载

主要实现文件下载的暂停和继续下载功能。 用到的知识点: 1、Service的使用以及Service与Activity之间的数据交互; 2、SQLite数据库的简单使用; 3、文件下载与存储; 4、广播的简单使用。

2015-05-19

Service使用

实现Service的启动、停止、绑定、解绑与Service中方法的调用。

2015-02-25

AsyncTask异步加载使用

AsyncTask异步加载使用Demo,详解可以参考《Android中AsyncTask的使用详解》,代码中的注释也比较详细,初学者可以参考。

2015-05-15

Android控件的简单使用

Android控件简单使用,AoutCompleTextView、MultiAoutCompleTextView、ToggleButton、CheckBox、RadioGroup等控件

2015-02-16

广播使用Demo

主要包括三种类型的广播的简单实用及对比。

2015-01-14

下拉列表使用

下拉列表的简单实用Demo,代码简单注释详细,适合初学者学习使用。

2015-01-16

Fragment使用

主要介绍Fragment的使用,包括动态加载、静态加载、生命周期、数据传递等,代码里注释比较详细,但代码中的结构和命名比较混乱,最好结合下面的问章看。http://blog.csdn.net/c19344881x/article/details/42876041

2015-01-20

ViewFlipper简单使用

ViewFlipper实现图片轮播和图片滑动切换,原理和思路比较清晰,滑动切换效果不是很好,需要修改动画效果文件。

2015-01-21

布局优化Demo

布局界面中include、merge、ViewStub的使用实例。

2015-01-27

通知Notification

这是一个Android中通知的简单使用源码,基本满足大多是用户的使用需求,其中的注释特别详细,适合初学者学习使用。

2015-01-28

Android Audio基础-音频链路分析(二十二)

Android Audio基础-音频链路分析(二十二)

2025-06-25

Android性能分析-Bootchart使用介绍

bootchart.jar

2025-06-18

MemoryAnalyzer-1.16.1

.hprof 文件解析工具

2025-05-23

jdk-24-windows-x64-bin

Java Jdk

2025-05-23

Systrace抓取工具

适用实用高版本Android Studio无法找到Systrace工具。

2025-05-21

python-2.7.13版本

python-2.7.13版本

2025-05-21

Android多语言strings.xml生成工具

在做 Android 开发的过程中,经常会遇到多语言开发的场景,尤其在车载项目中,多语言开发更为常见。对应多语言开发,通常都是在中文版本的基础上开发其他国家语言,这里我们会拿到中-外语言对照表,该工具就是可以将这里的 xls 文件生成 AndroidStudio 中直接使用的 strings.xml 工具。 参考文章:https://xiaoxu.blog.csdn.net/article/details/145152764

2025-04-09

HCI Log分析工具-CPAS-11

HCI Log分析工具-CPAS-11,使用参考:https://xiaoxu.blog.csdn.net/article/details/129261272

2024-04-17

Android Audio相关流程时序图

Android 11 Audio相关流程时序图,需要使用EA画图工具打开。包含Audio中音量获取/设置、焦点申请/放弃、属性设置等相关流程,从APP层到Hal层。 详细讲解相关文章参考:https://blog.csdn.net/c19344881x/category_12324194.html

2023-11-30

Android Radio相关流程时序图

Android 9.0 Radio相关流程时序图,需要使用EA画图工具打开。包含Radio暂停、播放、切换电台、获取电台信息、切换FM/AM、调频/调辐、搜索、取消搜索等相关流程,从APP层到Hal层。同时还包含类图等其他软件图。 详细讲解相关文章参考:https://blog.csdn.net/c19344881x/category_12312897.html

2023-09-01

MinGw 安装包,版本0.6.2

MinGw 安装包,版本0.6.2

2023-03-07

Android 蓝牙开发相关知识总结

Android 蓝牙开发相关知识总结

2023-03-07

SurfaceFlinger学习笔记总结

SurfaceFlinger学习笔记总结

2023-03-07

Android Studio生成自己的so库

Android Studio生成自己的so库

2023-01-06

根据.h文件在自己的so库中调用三方so库

根据.h文件在自己的so库中调用三方so库

2023-01-06

本地实现U盘扫描SDK部分代码

本地实现U盘扫描功能SDK,无法直接运行,需要自己编译成SDK在调用。 参考:https://blog.csdn.net/c19344881x/article/details/126161462

2022-10-28

开发调试所使用的各种格式音视频

视频格式:ts 264 avi wmv mkv mov rm 3gp flv gif mpg rmvb swf vob webm asf dat f4v h264_mp4 h265_mp4 音频格式:aac ac3 aiff amr au m4a mka mp2 ogg ra wav wma mp3

2022-07-20

Android端Socket实现聊天功能

Android端Socket实现聊天功能,能够发送文字、图片、商品等信息,实现了消息本地存储。讲解:https://mp.csdn.net/mp_blog/creation/editor/120673184

2021-10-11

jai-imageio和swingx.jar.zip

【图形处理相关的jar包】jai-imageio-1.1.jar和swingx-1.6.1.jar下载

2021-12-16

SocketDemo.zip

Android Socket通信简单实现源码下载:https://blog.csdn.net/c19344881x/article/details/120455491

2021-09-24

空空如也

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

TA关注的人

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