介绍思源笔记数据统计插件 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 播放器实现奠定基础。

阅读全文 »

深入剖析 Android 中 onTouch() 与 onClick() 两个事件监听方法在事件分发链路中的调用顺序与触发条件,结合 View.dispatchTouchEvent() 源码分析 OnTouchListener、OnClickListener 与 onTouchEvent() 之间的优先级关系,澄清开发者常见的触摸与点击事件冲突疑惑,给出实际开发中的正确处理方式。

阅读全文 »

通过自定义 ViewGroup 与 View 的实战案例,结合日志观察与流程图,系统归纳 Android 事件分发的执行顺序,从 Activity 的 dispatchTouchEvent() 开始,经 ViewGroup 的 dispatchTouchEvent() 与 onInterceptTouchEvent() 决策,最终到达目标 View 的 onTouchEvent(),覆盖默认分发、拦截消费、事件冲突处理等典型场景。

阅读全文 »

从源码层面深入分析 Android 事件分发的具体实现,分别剖析 Activity 的 dispatchTouchEvent() 与 onTouchEvent()、ViewGroup 的事件分发与拦截逻辑、View 的事件处理流程,结合 Android Framework 源码梳理事件从顶层 Activity 逐级传递到目标 View 的完整调用链路,帮助理解事件分发机制的底层运行原理。

阅读全文 »

系统介绍 Android 事件分发机制的基础概念,从 View 与 ViewGroup 的树形结构出发,解释 MotionEvent 对象如何承载 ACTION_DOWN、ACTION_MOVE、ACTION_UP 等触摸动作,并详细说明 dispatchTouchEvent()、onInterceptTouchEvent()、onTouchEvent() 三个核心方法的职责分工,以及事件传递在 View 树中的整体走向,为后续源码分析与流程实践奠定基础。

阅读全文 »
0%