自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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

原创 Android Framework的输入输出系统 epoll 和 inotify

Android Framework的epoll和inotify

2026-08-27 10:06:31 431

原创 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关注的人

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