- 博客(16)
- 收藏
- 关注
原创 Android 音频底层架构总览
App 进程 audioserver 进程 vendor 进程 kernelAudioTrack.java AudioFlinger Audio HAL ALSA/驱动↓ JNI (混音/建轨/写HAL) (stream_out) → 喇叭(客户端+Binder) (路由决策)└── Binder 控制面 ────┘└── 共享内存 数据面 ──┘。
2026-09-15 16:57:20
125
原创 android_media_AudioTrack_setup
|native→Java 回调:native 线程里调这个方法。|nativeTrackInJavaObj|jfieldID|AudioTrack.mNativeTrackInJavaObj(long)|long 句柄:C++ 指针 ↔ Java 对象。|jniData|jfieldID|AudioTrack.mJniData(long)|存 AudioTrackJniStorage(弱引用、回调存储等)|JNI字段|类型|Java侧对应|用途|
2026-09-08 15:22:18
207
原创 android_media_AudioTrack
<think>我们只需要根据用户要求生成一个≤150字的文章摘要。内容是关于JNINativeMethod结构和代码示例。摘要应概括主要内容。用户提供的是代码注释,要抓住关键点:JNINativeMethod用于注册Java native方法到C++函数,包含名称、签名、函数指针;签名编码类型,括号内参数,外返回。代码展示了AudioTrack多个native方法注册。 需要精简,不超过150字。</think>JNINativeMethod结构体用于将Java native方法映射到C++函数,包含方法名
2026-09-02 22:27:16
234
1
原创 ndroid 音频系统:AudioTrack 源码深度解析(从 Java 构造到 Native 启动)
<think>We need to generate a summary ≤150 characters based on the content. The content describes AudioTrack.java: it's a Java wrapper, forwards to native, defines EncapsulationMode annotation, handles deep buffer power saving, parameter validation, JNI cal
2026-09-01 22:25:46
209
原创 InputReader与InputDispatcher
用户手指触摸屏幕内核:在生成原始二进制数据EventHub:通过 epoll 感知到数据,通知 InputReader。: 开启 InputMapper,把原始坐标转成屏幕坐标,打包成 MotionEvent。:查看 WMS 给的窗口地图,发现点的是微信,于是找到微信的 InputChannelSocketPair: Dispatcher 往 fd 里写数据;微信进程的 Looper 被唤醒,从另一个 fd 读出数据。ViewSystem。
2026-08-31 21:24:36
176
原创 SocketPair 与 Binder 的跨进程协同
为什么有了 Binder 还要 SocketPair?因为Binder 负责的是“秩序”,它确保了跨进程调用的安全和规范;而SocketPair 负责的是“速度”,它追求的是在 120Hz 甚至更高的刷新率下,触摸事件能以最短的延迟从系统内核抵达你的手指。在 Android 输入系统中,它们不是替代关系,而是协作关系WindowManager 调起 IMS,通过 Binder 把 Socket 的一头传给 App。
2026-08-27 22:22:24
279
原创 Jetpack Compose + Hilt 使用 ExoPlayer
本文介绍了使用ExoPlayer实现视频播放功能的开发流程。主要包括:1. 核心组件配置,通过Dagger Hilt依赖注入创建ExoPlayer实例,并设置100MB的缓存策略;2. 状态管理设计,使用ViewModel管理播放状态、加载状态和错误信息;3. 生命周期处理,通过LifecycleEventObserver实现暂停时自动停止播放;4. UI组件实现,包含播放器视图和网络视频播放按钮。该方案提供了完整的视频播放功能实现,包括缓存优化、状态同步和异常处理机制。
2026-03-12 18:42:55
384
1
原创 OkHttp拦截器
No Content(服务器成功地处理了客户端的请求,但是没有任何要响应的内容)的时候,返回的。就会越界,超出范围,这时候check能够第一时间抛出异常,防止程序崩溃。这个先处理“用户逻辑”,再处理“协议的逻辑”,最后建立连接、读写数据。如果在请求过程中,用户取消了请求,需要及时关闭响应体,防止内存泄露。来读取数据,就都有有判空的步骤,这样代码的复杂度将会增加。这个在OkHttp的前半段中,当前半段拦截器执行时,列表是同一个,唯一的区别是 index 加了 1。这个强制要求,任何拦截器返回的对象,其中的。
2026-02-23 16:39:31
776
原创 Android View 挂载流程全解析(下)
本文详细解析了Android视图系统的挂载流程,重点分析了从setContentView到handleResumeActivity的完整过程。关键点包括:1) PhoneWindow作为窗口管理者;2) DecorView作为视图根容器;3) ViewRootImpl作为核心纽带,负责绘制流程发起、事件分发和WMS通信。文章深入剖析了WindowManagerGlobal的addView流程、ViewRootImpl的setView方法,以及最终的performTraversals三大绘制阶段(测量、布局、
2026-02-13 14:23:46
1395
原创 Android View 挂载流程全解析(上):从 Activity 到 WindowManager
Android视图挂载流程解析:从setContentView到屏幕显示 摘要:本文详细分析了Android视图从Activity的setContentView()到最终显示在屏幕上的完整流程。首先,setContentView()会触发AppCompatDelegate创建DecorView,并通过LayoutInflater将布局填充到ID为content的FrameLayout中。然后,在ActivityThread的handleResumeActivity()中,系统通过WindowManager.
2026-02-12 16:45:25
686
原创 OkHttp 源码解析
OkHttp作为Android主流HTTP客户端,其核心设计包括四个关键组件:1)OkHttpClient作为门面类提供统一接口;2)Request封装HTTP请求数据;3)RealCall负责连接应用层和网络层,支持同步/异步请求;4)Dispatcher作为调度大脑,通过双端队列管理任务执行。特别值得注意的是其并发控制机制,通过maxRequests(默认64)和maxRequestsPerHost(默认5)限制请求数量,配合原子计数器和线程池实现高效调度。任务执行采用"永动机"模式
2026-02-11 14:50:09
760
原创 Android中JNI和NDK
本文介绍了Android NDK和JNI的基本概念及简单实现。JNI作为Java与C/C++的通信桥梁,NDK则是编译工具包。文章通过一个Kotlin调用C++字符串的示例,详细讲解了JNI方法的定义规则、CMake构建脚本配置,以及JNIEnv等核心概念的使用。示例包括Kotlin加载库声明、C++函数实现及CMake编译配置,帮助开发者快速掌握Android原生开发的基础流程。该技术适用于高性能计算、复用C/C++库等场景。
2026-02-10 16:57:02
722
原创 Compose中使用Hilt注入ViewModel指南并有简单实例
摘要:本文介绍如何在Jetpack Compose中使用Hilt实现ViewModel依赖注入。
2026-02-09 21:51:49
871
原创 Handler机制解析
摘要:Handler是Android消息机制的核心组件,用于线程通信和UI操作调度。其四大组件包括消息载体Message、优先级队列MessageQueue、轮询器Looper和处理者Handler。核心流程涉及消息发送、队列存储和循环分发。关键考点包括:1)ThreadLocal保证线程与Looper的一一对应关系;2)Looper的死循环设计不会导致ANR,通过epoll机制实现高效休眠;3)Handler可能引发内存泄漏,需使用静态内部类和弱引用防范;4)同步屏障机制可优先处理UI刷新等异步消息。
2026-02-09 20:14:20
378
原创 SharedPreferences弃用后:DataStore + Android Keystore 打造硬件级安全存储全攻略
Android加密存储最佳实践:Google建议弃用EncryptedSharedPreferences,改用DataStore+AndroidKeystore组合方案。通过定义密钥别名、加密算法(AES/GCM/NoPadding)和密钥规格(256位),在硬件安全模块中生成和存储密钥。实现包含加密/解密流程:加密时自动生成IV并写入输出流,解密时先读取IV再验证数据完整性。配合Kotlin序列化,构建安全可靠的用户数据存储方案,异常时返回默认值保证稳定性。该方案相比传统方法具有更高安全性和现代化架构优势
2026-01-08 14:33:25
1148
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅