基于 Android 12 源码涉及文件:system/core/rootdir/init.rcsystem/core/rootdir/init.zygote64.rcsystem/core/rootdir/init.zygote32.rcframeworks/base/cmds/app\_process/app\_main.cppframeworks/base/core/jni/AndroidR
1. 前言? 一句话总结:触摸事件(TouchEvent)会从 Activity 层开始,按从外到内的方式传递给每一个 ViewGroup/View,直到某个 View 消费(consume) 它,事件传递就会停止。? 事件分发三个关键方法方法名所在类作用说明dispatchTouchEvent()所有 View/ViewGroup事件分发入口,决定是否继续向下传递onInterceptTouch
一、引言Handler 在安卓中的地位是不言而喻的,几乎维系着整个安卓程序运行的生命周期,但是这么重要的一个东西,我们真的了解它吗?下面跟随着我的脚步,慢慢揭开Hanler的神秘面纱吧!本文将介绍Handler 的运行机制、MessageQueue、Looper 的关系,ThreadLocal,以及Handler 导致的内存泄漏问题二、Handler 系统组成概览在 Handler 的源码中,主要
1. ThreadLocal 的概念ThreadLocal 是 Java 中的一个类,用于实现线程本地存储。它允许你创建一个变量,这个变量在每个线程中都有自己独立的副本,不同线程之间的副本互不干扰。换句话说,ThreadLocal 提供了一种线程隔离的机制,使得每个线程都可以拥有自己的变量实例。1.1 ThreadLocal 的基本用法ThreadLocal<String> threa
掉帧指的是某一帧没有在规定时间内完成渲染,导致 UI 画面不流畅,产生视觉上的卡顿、跳帧现象。Android目标帧率: 一般情况下,Android设备的屏幕刷新率是60Hz,即每秒需要渲染60帧(Frame Per Second, FPS)。每帧时间预算: 60 FPS → 1秒钟1000ms / 60 ≈ 16.67ms,即每一帧的渲染时间不能超过16.67ms,否则就会出现掉帧。120Hz设备
前言一个自定义的圆形 SeekBar,类似于传统的 SeekBar 但采用了圆形轨迹。最近被一个网友私信问有没有类似效果的View,因为前面做过几个环形进度条,这个不就加个触摸效果么,以为不算很难,但深入了解后,才发现事情并没有那么简单...你需要具备的知识:三角函数正弦余弦计算、反三角函数、角度弧度区别..该View 由 CircleSeekbar 优化而来,深入进行剖析其原理,效果图如下:1.
先来了解一下几种应用启动的概念:冷启动(Cold Start):应用完全未启动,模拟全新启动过程。 暖启动(Warm Start):进程仍然存活,但 Activity可能需要重新创建。 热启动(Hot Start):进程存活,Activity只是从 onStop 恢复到 onResumeadb命令检测adb shell am start -W com.example.quickdev/com.ex
分析系统启动后通过过滤 SettingsActivity ,然后点击 设置-系统-手势-系统导航,进入系统导航设置界面,通过日志可以看出,SettingsActivity com.android.settings D Switching to fragment com.android.settings.gestures.SystemNavigationGestureSettings当前界面就是:c
OOBE 是 "Out-Of-Box Experience"(开箱体验)的缩写。它指的是用户在首次使用 Android 设备时所经历的初始设置过程。Provision源码分析Provision 在 Android 系统中是一个关键的 初始化引导程序,主要用于设备首次启动或系统升级后执行基础配置,确保设备进入可用状态,引导用户进入初始化的操作,就是开机向导。其核心功能包括:设置系统就绪标志:通过写入
google官方文档:使用 Hilt 实现依赖项注入Hilt 是 Android 官方推荐的 依赖注入(DI, Dependency Injection) 框架,它基于 Dagger 进行了封装,简化了 Dagger 在 Android 项目中的使用。Hilt 主要用于 管理和提供依赖对象,使得应用程序的代码更模块化、易于测试和维护。1. Hilt 介绍为什么需要 Hilt在 Android 开发
suspendCoroutineKotlin 协程 提供的一个底层 API,它用于将回调风格的异步代码转换为挂起函数。在 Kotlin 的挂起函数中,我们通常使用 suspendCoroutine1. suspendCoroutine 的基本用法import kotlin.coroutines.resume import kotlin.coroutines.suspendCoroutine s
一、背景介绍在 Android 开发与调试过程中,adb shell bugreport 曾是开发者获取设备完整诊断信息的核心工具。然而随着 Android 系统的演进,Google 逐步推动其向更高效的压缩格式过渡。二、adb shell bugreport 的弃用与替代方案随着 Android 系统的发展,纯文本 bugreport 已经逐渐被废弃。在新版系统中,当你运行上述命令时,会看到类似
在 Ubuntu 上,vim 是一个强大的文本编辑器,常用于代码编写和配置文件编辑。下面是 Vim 指令的基本使用,包括如何打开、编辑、保存和关闭文件。1. Vim 的基本模式Vim 有 三种主要模式:普通模式(Normal Mode)(默认模式):用于导航、复制、粘贴等操作。插入模式(Insert Mode):用于编辑文本。命令模式(Command Mode):用于保存、退出等操作。2. 打开
1. SystemProperty1.1 引入 SystemProperties 类在 Android Framework 中,SystemProperties 类用于访问和操作系统属性。系统属性在 Android 系统中广泛用于存储和检索配置信息。主要方法get(String key) get(String key, String def) getInt(String key, int def)
在 Android Framework 开发中,Overlay 主要用于修改和替换系统或应用的资源,而无需直接修改源码,与源码解耦。Overlay 机制可以分为 两种类型:静态 Overlay(Static Resource Overlay, SRO)在 编译时 覆盖资源。适用于系统级资源修改(如默认壁纸、配置文件等)。需要在 PRODUCT_PACKAGE_OVERLAYS 中指定 Overla
1. Android 开机动画的基本机制Android 的开机动画由 bootanimation 进程控制,它会读取 /system/media/bootanimation.zip 或 /product/media/bootanimation.zip,然后按照配置播放开机动画。动画格式Android 的开机动画是一个 ZIP 压缩包,里面包含多个帧图片,以及一个 desc.txt 配置文件。存放路
以下是优化后的 Markdown 标准写法,保留了图片链接和内容结构:九、流程控制Shell 脚本支持常见的流程控制结构,如条件判断、循环和分支选择。1. 条件判断条件判断用于根据条件执行不同的代码块。Shell 中最常用的条件判断语句是 if。1.1 if 语句基本语法if [ 条件 ]; then # 条件为真时执行的代码 elif [ 其他条件 ]; then # 其他条件为
Qt 的信号槽机制是 Qt 框架的核心特性之一,它是一种用于对象间通信的机制。信号槽机制取代了传统的回调函数,提供了更灵活、更安全的方式来处理事件和对象之间的交互。一、 信号槽机制的基本概念语法:connect(sender, signal, receiver, slot);sender:信号发送者signal:信号receiver:信号接收者slot:接收对象在接收到信号之后所需要调用的函数(槽
Qt 是一个跨平台 C++ 框架,通常项目会包含头文件(.h)、源文件(.cpp)、资源文件(.qrc)、界面设计文件(.ui),以及配置文件(.pro)。1. 头文件(Header Files,.h)1.1 头文件的作用头文件主要声明类、结构体、函数、全局变量等,供其他源文件引用。头文件可以避免重复定义和方便模块化设计。1.2 头文件的基本组成结构#ifndef MYCLASS_H #defin
前言该篇文章根据前面 重学 Android 自定义 View 系列(六):环形进度条 拓展而来。最终效果如下:1. 扩展功能支持进度顺时针或逆时针显示在进度条末尾添加自定义指针图片使用线性渐变为进度条添加颜色效果2. 关键技术点解析2.1 进度方向控制的实现通过添加一个 direction 属性,设置角度的正负,决定进度条是顺时针还是逆时针绘制:public static final int CL
在现代移动应用开发中,用户体验的流畅性和响应性至关重要。为了实现这些目标,开发者需要处理各种异步任务,如网络请求、数据库操作和复杂的计算任务。然而,传统的异步编程方法,如回调(Callbacks)和线程(Threads),常常导致代码复杂、难以维护和容易出错。幸运的是,Kotlin 协程的出现为 Android 开发者提供了一种简洁、高效的异步编程解决方案。目录什么是 Kotlin 协程?协程的优
在 Android 开发中,前台服务(Foreground Service)是一个重要的机制,用于确保应用在后台运行时能够保持活跃状态。1. 什么是前台服务?前台服务是一种运行在后台但用户感知到的服务。它通常用于执行需要长期运行的任务,例如:播放音乐GPS 跟踪视频录制网络传输前台服务与普通后台服务的主要区别在于:通知要求:前台服务必须显示一个持续通知。系统优先级高:前台服务的优先级较高,不易被系
在安卓开发中,国际手机号校验是一个常见的需求,尤其是当应用支持全球用户时。为了确保用户输入的手机号码有效,我们需要依据国际标准进行格式验证。1. 为什么需要国际手机号校验?手机号格式因国家/地区而异。每个国家的手机号码具有不同的长度和前缀(如国家代码)。因此,简单的正则表达式无法涵盖所有国家的手机号格式,导致验证无法满足国际化需求。我们需要一个方法来统一和准确地校验国际手机号。2. 使用 libp
生产者-消费者模式是一种经典的多线程编程模型,在 Android 开发中常用于任务队列的处理、数据流的解耦等场景。1. 模式简介生产者:负责生成数据并放入缓冲区。消费者:从缓冲区取出数据并处理。缓冲区:用于存储生产者生成的数据,并在消费者消费后释放。关键点:保证生产者和消费者线程安全。生产者在缓冲区满时等待,消费者在缓冲区空时等待。2. 实现方式(1) 使用 BlockingQueueJava 提
在Android开发中,有时我们需要在特定的场景下关闭安全键盘(如软键盘)。例如,用户在输入完成时,或者输入框失去焦点时,我们希望程序能够自动关闭键盘。方法一:通过 InputMethodManager 隐藏键盘Android提供了 InputMethodManager 来控制软键盘。通过这个类,我们可以请求关闭软键盘。具体代码如下:// 获取InputMethodManager InputMet
在Android开发中,ViewModel 是一个用于在 Activity 和 Fragment 中共享数据的组件。对于父 Fragment 和其内部的子Fragment(通过 ChildFragmentManager 加载的Fragment),是否能共用一个 ViewModel,是许多开发者关心的问题。一、答案:父Fragment和子Fragment是否共用ViewModel?默认情况下,父Fr
在数据传输和文件完整性校验中,CRC32 校验(Cyclic Redundancy Check)是一种常用的错误检测方法。它的计算速度快、实现简单,常用于文件完整性校验和数据包校验。? 一、什么是 CRC32?CRC32 (32位循环冗余校验) 是一种将输入的字节数据计算为一个32位整数(4字节)的算法。 其主要用途是检测数据传输中是否存在错误,在文件传输、数据通信、网络协议等场景中被广泛使用。简
Android 10 引入了 Scoped Storage(分区存储),限制了对外部存储的访问,无法像以往那样直接使用 File 来操作外部存储中的文件。需要借助官方提供的 MediaStore、Storage Access Framework (SAF) 等工具,来访问和管理文件。? 1. 访问公共目录内容在 Android 10 中,访问图片、视频、音频、下载文件等公共媒体文件,推荐使用 Me
在开发 Android 应用时,图片的完整性校验是一个常见但容易被忽略的细节。无论是从网络下载图片、从本地存储加载,还是通过第三方接口上传图片,校验图片是否完整都能有效避免因数据损坏导致的应用崩溃或错误显示。一、为什么需要校验图片完整性?网络传输可能中断:在网络不稳定时,下载的图片可能不完整,无法正确解析。存储设备故障:存储损坏可能导致文件部分丢失或被篡改。文件校验有助于安全性:确保图片数据未被恶
以下是关于 postInvalidateOnAnimation一、什么是 postInvalidateOnAnimation?postInvalidateOnAnimation 是 Android View 中用于在下一帧动画刷新时请求重绘界面的方法。定义:public void postInvalidateOnAnimation()这是一个非阻塞的、异步的重绘请求,与 invalidate()
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号