到现在为止我对Binder 的了解只是知道它很难和它是 Android 系统中最核心的跨进程通信机制,仅此而已,所以接下来几篇文章都是学习的Android Binder 驱动的。以安卓 12 源码为基础分析相关文件:frameworks/av/media/mediaserver/mediaserver.rcframeworks/av/media/mediaserver/main_mediaserv
基于 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
它们都是用来在 Android UI 中显示复杂图形内容的组件,比如视频、相机预览或游戏画面,但实现方式和适用场景有很大不同。如果不了解他们的作用的话,在开发中很难去选择,下面就详细梳理下它们的区别和使用方式及其相关概念。一、SurfaceView (表面视图)SurfaceView 的核心思想是创建一个独立的、位于普通视图层级之外的 “表面” (Surface) 。介绍继承自 View,它包含两
SparseArray 和 ArrayMap 都是 Android 特有的集合类,出现在 android.util 包下。 它们的诞生原因是 Android 在内存和性能优化上的特殊需求 —— 在移动设备上,内存、GC 频率和性能都是敏感指标,所以 Google 给我们提供了比 Java 标准集合更轻量的替代方案。它们在功能上与 Java 标准库中的 HashMap 类似,都是键值对(Key-Va
一、公平锁与非公平锁这组概念描述的是线程获取锁的策略。公平锁顾名思义,它追求“先来后到”的公平原则。线程在请求锁时,会先进入一个等待队列,排在队首的线程才有机会获取锁。优点: 避免了饥饿现象(某个线程一直抢不到锁)。缺点: 性能较低,因为每次获取锁都需要进行队列操作,有额外的开销。非公平锁允许“插队”。当一个新线程请求锁时,它会先尝试获取,如果成功就直接拿到锁,不用排队。只有当尝试失败时,它才会进
HashMap 作为 java 和 Android 开发中面试的必问问题,很有必要对其有一个详细的了解。在 JDK 1.8 中,HashMap 的底层实现有了一些重要的优化。本文将从源码角度详细解析其底层原理。JDK 1.8 相比 1.7 有了较大优化(比如引入红黑树)源码部分重点在四个地方:根据key获取哈希桶数组索引位置put方法的详细执行扩容过程get方法过程一、核心数据结构HashMap
Java 垃圾回收(Garbage Collection, GC)是 JVM 运行时内存管理的核心机制之一,用于自动回收不再使用的对象,避免内存泄漏并提高开发效率。一、 GC算法的历史与演进Java GC算法的发展是一个持续优化的过程,主要经历了以下几个阶段:早期(JDK 1.0 - 1.4): 这个阶段的GC相对简单,主要以串行(Serial)收集器为主,适用于内存较小、单核处理器的环境。并发与
一、概述JVM 是 Java 虚拟机(Java Virtual Machine)的缩写,它是 Java 程序运行的执行引擎。它屏蔽了底层操作系统的差异,让 Java 字节码可以在不同平台上运行。更重要的是在虚拟机自动内存管理机制的帮助下,不再需要手动释放内存,不容易出现内存泄露和内存溢出问题。Java 编译器(javac)把 .java 文件编译成 .class 字节码,而 JVM 负责执行这些字
在安卓中用到的三方库:https://github.com/arthenica/ffmpeg-kit这个库很强大,支持很多平台,每个平台都有各自的分支代码,用了一段时间,稳定性挺好的,找到安卓下的分支:FFmpegKit for Android FFmpegKit Android 版引入项目:repositories { mavenCentral() } dependencies {
theme: cyanosis一、加密算法介绍RSA、AES、DES 一种方式做解析,不传明文,只传密文MD5 一种方式做解析,即传递明文(参数),也传递密文(md5),后台先去校验比对成功返回数据,不成功返回错误RSA(非对称加密)密钥:一对公钥(public key)和私钥(private key)常用于:登录认证、公钥加密敏感信息、服务器通信中传输对称密钥等优点:公私钥分离,安全性高缺点:运
1. 环境1.1 基础配置NDK 22b (r22b)FFmpeg 4.4Ubuntu 22.041.2 下载ffmpeg官网提供了 .tar.xz 包,可以直接下载解压:wget https://ffmpeg.org/releases/ffmpeg-4.4.tar.xz tar -xvf ffmpeg-4.4.tar.xz cd ffmpeg-4.41.3 安装基础工具链sudo apt-get
theme: cyanosis一、前言前面文章写过了,使用NDK交叉编译C/C++文件为静态库和动态库,在安卓中调用,当时环境在windows上,不知道是不是环境原因导致动态库无法使用,这次电脑环境为纯Ubuntu系统,再来重走一下来时路...二、编译动态库方式一(只在Ubuntu上使用)假设,你的电脑上已经安装了NDK了查看NDK版本ls ~/Android/Sdk/ndk/这个是AS默认创建的
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
一. mk 文件1. mk 文件介绍Android.mk 是 Android 提供的一种 Makefile 文件,主要用于编译生成(exe,so,jar,apk)等文件。2. mk 文件基本格式#每个 Android.mk 文件必须以定义 LOCAL_PATH 为开始,它用于在开发树中查找源文件。LOCAL_PATH:= $(call my-dir)#CLEAR_VARS 变量由 Build Sy
Android系统提供了几个主要的预装应用目录,每个目录有不同的用途和权限级别:/system/app - 系统核心应用目录需要系统签名用户无法卸载适合系统核心应用/system/priv-app - 系统特权应用目录拥有更高的权限(privileged permissions)需要系统签名用户无法卸载/product/app - 产品应用目录(Android 10+推荐)产品定制应用可以不需要系
分析系统启动后通过过滤 SettingsActivity ,然后点击 设置-系统-手势-系统导航,进入系统导航设置界面,通过日志可以看出,SettingsActivity com.android.settings D Switching to fragment com.android.settings.gestures.SystemNavigationGestureSettings当前界面就是:c
在 Android 源码编译过程中,m、mm 和 mmm 是常用的三种编译命令,它们的作用和适用场景略有不同,下面详细介绍它们的区别和使用方法。1. m(全局编译)作用m 是 全局编译命令,它会在 Android 根目录下执行,用于编译整个 AOSP 项目或特定模块,并自动解决依赖关系。用法m <module_name>或:make <module_name>示例m Set
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
在 Linux 或 macOS 终端中,我们经常需要执行脚本来设置环境变量、运行程序等。其中,source env.sh 和 ./env.sh 都可以用来执行 env.sh 脚本,但它们有本质上的区别。1. source env.sh(或 . env.sh)source 命令用于在当前 Shell 进程中执行脚本,它不会创建新的子进程,而是直接在当前 Shell 环境中运行脚本内容。特点影响当前
一、背景介绍在 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
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号