Android Touch事件分发与MotionEvent详解
Android Touch事件分发与MotionEvent详解Android开发中Touch事件的处理无处不在,从简单的OnClickListener到复杂的自定义View手势识别,理解Touch事件的分发机制是解决滑动冲突、优化交互体验的基础。本文将从MotionEvent的数据结构出发,系统梳理Touch事件从Activity到View的完整分发链路。1、MotionEvent数据结构Moti
分类
深入探讨 Android 系统的核心架构与高级开发,聚焦四大组件(Activity、Service、Broadcast Receiver、Content Provider)的原理、生命周期管理和交互机制。从基础的组件构建与通信,到 Android Framework 层(如 AMS、WMS、PMS)的源码剖析和自定义扩展,提供详尽代码示例、调试技巧和性能优化策略。涵盖 JNI、AIDL、Binde
共 356 篇文章
Android Touch事件分发与MotionEvent详解Android开发中Touch事件的处理无处不在,从简单的OnClickListener到复杂的自定义View手势识别,理解Touch事件的分发机制是解决滑动冲突、优化交互体验的基础。本文将从MotionEvent的数据结构出发,系统梳理Touch事件从Activity到View的完整分发链路。1、MotionEvent数据结构Moti
Android ColorStateList 详解1、ColorStateList 概述ColorStateList 是 Android 中用于管理不同状态下颜色的类,它允许为 View 的不同状态(如按下、聚焦、禁用等)设置不同的颜色。ColorStateList 广泛应用于按钮、文本框等控件的颜色管理,是实现响应式 UI 的重要工具。核心特性: - 支持多种 View 状态的颜色定义 - 可以

UncaughtExceptionHandler 原理使用UncaughtExceptionHandler捕获运行时线程中发生的未捕获异常,可以极大的提高应用稳定性。UncaughtExceptionHandler使用很方便,参考异常捕捉:UncaughtExceptionHandler一文。1、线程异常传递当线程运行出现奔溃,JVM虚拟机会调用Thread的dispatchUncaughtExc
MessageQueue中的同步屏障Message,最早可以翻到两年前写的一篇粗浅博客《信件:Message》。当时还不明白异步消息、同步消息,更不懂今天要写的同步屏障。同步屏障,简而言之就是让异步消息的优先级高于同步消息,优先被处理。1、同步屏障MessageQueue设置同步屏障后,会拦截对同步消息的处理,只会处理异步消息,如果没有异步消息则进入阻塞状态。若没有及时移除同步屏障,所有的同步消息

Choreographer源码阅读之前已经在很多地方看到过Choreographer的身影,必须要仔细的看一遍Choreographer源码以理解其实现原理。Choreographer请求和接受来自底层的VSYNC信号,给上层应用提供一个稳定的周期,去处理Input事件、动画、更新布局等。1、Choreographer构造及初始化Choreographer直译为编舞者,看完源码更能理解Choreo

Animator属性动画源码仔细看看属性动画的源码,加深对动画实现原理的了解。ObjectAnimator继承自ValueAnimator,本篇主要以ValueAnimator为主。关于属性动画,详见之前两篇介绍属性动画的文章:属性动画:ValueAnimator和属性动画:ObjectAnimator。1、属性动画的构造得益于框架优秀的设计,构造一个属性动画对象很简单,举个简单的例子:从Valu

布局彩蛋:BlinkLayout闪烁布局解析XML布局的过程中有一个彩蛋,在LayoutInflater类中的tryCreateView()方法里:其中TAG_1995标签的定义如下,在这里还能看到熟悉的两个布局tag:<merge/>和<include/>。1、使用<blink/>新建一个普通项目,在XML布局中尝试一下<blink/>这个标签:忽略AndroidStudio的Cannot re

LayoutParams初始化流程在View布局参数LayoutParams一文中对布局参数有了详细的了解。用getLayoutParams()方法获取View的布局参数:每个View中的mLayoutParams实例可以通过setLayoutParams(ViewGroup.LayoutParams params)方法设置的:不需要为View初始化mLayoutParams实例,因为这是View

View布局参数LayoutParams为了计算布局实现动效和LayoutParams密切接触有一段时间,LayoutParams彻底玩明白了。1、LayoutParamsLayoutParams直译为布局参数,是定义在ViewGroup中的静态内部类。1.1、LayoutParams用途LayoutParams类的注释清楚的写明此类的用途:LayoutParams是子View用来告诉它们的父布局

bindService绑定服务源码流程终于轮到双休,周末可以摸一下书。本次阅读的源码基于API 30,将来回头再看可能有误。1、绑定ServiceService作为四大组件之一,承担着执行后台任务的重担。有两种启动方式:①startService,②bindService。本篇跟随源码了解绑定Service的过程。绑定Service仅需简单几步:将Service的绑定过程拆分开来看,并不复杂,逻辑
深入理解Android Parcel原计划按照AIDL、Binder不断深入学习Android跨进程IPC,中途发现这些都离不开一个容器:Parcel,还记得在Android中的两种序列化:Parcelable和Serialable一文中讲到Parcelable,Parcelable也通过Parcel的写入和读出完成数据序列化。先来了解一下Parcel及其底层原理,将这前后知识串起来。1、剖析Pa

包可见性引起的问题:Unable to start service Intent U=0: not found有同学遇到无法启动三方应用Service的“玄学”问题,让我来看看到底是哪里的问题。通常启动三方应用的Service很简单,只需简短的几行代码:但是无论如何也不能启动三方应用的Service服务,查看AMS相关的系统日志发现是找不到Service导致启动失败(也没有报异常出来):1、问题分

StrictMode原理剖析在上一篇StrictMode:严格模式的使用中了解了StrictMode的使用,接下来深入源码,探索StrictMode的实现。主要涉及的源码目录如下:/frameworks/base/core/java/android/os/strictmode/libcore/dalvik/src/main/java/dalvik/system/libcore/luni/src/m

StrictMode:严格模式的使用第一次接触使用StrictMode还是刚毕业的时候,现在再次记录一下StrictMode。本篇主要详细了解StrictMode的使用方法。关于StrictMode的实现原理详见另外一篇StrictMode原理剖析。1、StrictModeStrictMode是从Android 2.3(API 9)开始引入的调试工具。通常帮助开发者用来检测应用中出现的主线程I/O

Apk的安装过程探究有了APK的构建过程和APK的组成结构两篇铺垫,以及PackageManagerService基础。终于到了最后阶段:Apk的安装过程。这块内容比较多,抽空断断续续的看了一个星期摸清楚。通常Apk的安装方式有三种:①手机上点击Apk文件,打开安装界面进行安装②通过代码的方式静默安装,比如手机自带的应用商店安装应用。③开发者使用adb命令安装apk文件挨个探究以上三个方式,每种方