思源笔记数据统计插件siyuan-dashboard v1.2.0来了
介绍思源笔记数据统计插件 siyuan-dashboard v1.2.0 的功能特性与使用方式,该插件用于展示思源笔记的统计数据,支持使用天数、笔记数、字数、标签数量等核心指标统计,提供使用天数百分比、年/月/周维度的总字数与平均字数计算、历史数据按年月切换查看、笔记本范围筛选等功能,并完整适配明亮与暗黑主题以及英文多语言,方便用户直观跟踪写作积累。
介绍思源笔记数据统计插件 siyuan-dashboard v1.2.0 的功能特性与使用方式,该插件用于展示思源笔记的统计数据,支持使用天数、笔记数、字数、标签数量等核心指标统计,提供使用天数百分比、年/月/周维度的总字数与平均字数计算、历史数据按年月切换查看、笔记本范围筛选等功能,并完整适配明亮与暗黑主题以及英文多语言,方便用户直观跟踪写作积累。
系统解析 Android 输入法框架 IMF 的三方协作机制,详述客户端 InputMethodManager、系统服务 InputMethodManagerService、输入法服务 InputMethodService 之间的交互流程,覆盖输入法拉起链路、IMS 生命周期、IInputMethod 与 IInputMethodSession 等 aidl 接口契约,以及跨进程 Binder 通信的实现细节。
详细剖析 IjkPlayer 数据读取线程 read_thread 的实现,从 FFmpeg 的 avformat_alloc_context、avformat_open_input、avformat_find_stream_info、av_find_best_stream 等关键 API 入手,梳理 read_thread 从打开媒体源、探测流信息、选择音视频流到进入读包主循环的完整流程,揭示 IjkPlayer 数据供给链的底层实现。
深入分析 IjkPlayer 的消息循环机制,从 AVMessage 与 MessageQueue 的数据结构出发,梳理消息队列在播放器创建过程中的初始化时机、msg_queue_start 启动消息循环的关键逻辑、消息循环线程的创建与运行机制,以及 Native 层如何通过 postEventFromNative 将播放事件回传到 Java 层 EventHandler。
详细剖析 IjkPlayer 播放器的创建流程,从 Java 层 IjkMediaPlayer.loadLibrariesOnce 加载 ijkffmpeg、ijksdl、ijkplayer 三个 so 库入手,结合 JNI_OnLoad 动态注册机制追溯 Native 层 IjkMediaPlayer 结构体的初始化过程,并梳理从应用层 newPlayer 到底层 ffp_create 的完整调用链路,为后续分析播放、解码、渲染等子系统奠定整体框架认知。
作为 IjkPlayer 源码阅读系列的开篇,系统梳理 IjkPlayer 的编译流程与源码目录结构,并复习 NDK 开发与 JNI 基础知识,涵盖 JavaVM 与 JNIEnv 的关系、JNI 函数的静态与动态注册方式、JNI 与 Java 层的相互调用约定,为后续深入分析 IjkPlayer 播放器实现奠定基础。
深入剖析音视频帧的关键参数与同步机制。先从 MPEG 音频帧格式入手,推导帧大小、帧长度、比特率、采样率与每帧持续时间的计算公式(如 44.1KHz 采样率下 MP3 每帧固定 26ms 的由来);再讲解视频帧的 I/P/B 三种图片类型、宏块划分与 GOP(Group of Pictures)编解码顺序与显示顺序的差异;最后梳理 DTS(解码时间戳)与 PTS(显示时间戳)的语义,以及视频同步到音频、音频同步到视频、同步到外部时钟三种音视频同步策略,并解释为何通常选择视频同步到音频时钟。
系统梳理音视频开发的基础知识,涵盖视频编码(MPEG、H.26x 系列)、音频编码(MP3、AAC、WMA)、Android 多媒体播放组件(MediaPlayer、MediaCodec、OMX、StageFright、AudioTrack)、多媒体框架(VLC、FFmpeg、GStreamer),以及帧率、分辨率、刷新率、编码格式、封装格式、码率、颜色空间(YUV/RGB)、采样率、量化精度、声道等核心概念,为后续深入音视频开发奠定基础。
深入剖析 Android 中 onTouch() 与 onClick() 两个事件监听方法在事件分发链路中的调用顺序与触发条件,结合 View.dispatchTouchEvent() 源码分析 OnTouchListener、OnClickListener 与 onTouchEvent() 之间的优先级关系,澄清开发者常见的触摸与点击事件冲突疑惑,给出实际开发中的正确处理方式。
通过自定义 ViewGroup 与 View 的实战案例,结合日志观察与流程图,系统归纳 Android 事件分发的执行顺序,从 Activity 的 dispatchTouchEvent() 开始,经 ViewGroup 的 dispatchTouchEvent() 与 onInterceptTouchEvent() 决策,最终到达目标 View 的 onTouchEvent(),覆盖默认分发、拦截消费、事件冲突处理等典型场景。