分类

Android

深入探讨 Android 系统的核心架构与高级开发,聚焦四大组件(Activity、Service、Broadcast Receiver、Content Provider)的原理、生命周期管理和交互机制。从基础的组件构建与通信,到 Android Framework 层(如 AMS、WMS、PMS)的源码剖析和自定义扩展,提供详尽代码示例、调试技巧和性能优化策略。涵盖 JNI、AIDL、Binde

共 67 篇文章(已按标签筛选)

置顶
AOSP源码下载
Android

AOSP源码下载

AOSP源码下载1、获取源码阅读Android源码能够从系统框架层面更加深入理解底层实现,而且无疑是对代码阅读能力的提升锻炼。推荐国内AOSP源码网站在线阅读:Android源码在线阅读。1.1、Google仓库Google官方的Android 源码站点在国内都打不开,需要“科学上网”。https://android.googlesource.com/https://source.android.

2.9k
Android

RemoteViews 实现原理深度解析

RemoteViews 实现原理深度解析RemoteViews,顾名思义,就是远程的 View。它是 Android 提供的一个用于跨进程更新 UI 的类,可以在其他进程中创建和更新 View。RemoteViews 实现了 Parcelable 接口,因此可以在进程间传输,主要用于通知栏通知和桌面小组件等场景。1、RemoteViews 概述1.1、什么是 RemoteViewsRemoteVi

242
Android

Android 应用权限管理器 AppOpsManager 详解

Android 应用权限管理器 AppOpsManager 详解1、AppOpsManager 概述AppOpsManager 是 Android 4.3(API 18)引入的应用权限管理服务,用于跟踪和控制应用对敏感操作的访问。它提供了比传统权限更细粒度的控制,允许用户或系统限制特定应用的操作权限。核心特性: - 细粒度权限控制,精确到具体操作 - 支持运行时权限检查和限制 - 提供操作访问记录

384
Android

Android Display 管理服务 DisplayManager 详解

Android Display 管理服务 DisplayManager 详解1、DisplayManager 概述DisplayManager 是 Android 系统服务,负责管理显示设备,包括主屏幕、外接显示器、虚拟显示器等。它提供了获取显示信息、监听显示变化、管理多屏显示等功能。核心特性: - 管理所有显示设备 - 提供显示信息查询接口 - 支持显示变化监听 - 支持多屏显示和屏幕镜像 -

330
Android

Toast 源码详解:从创建到显示的完整流程

Toast 源码详解:从创建到显示的完整流程1、Toast 的创建与初始化1.1、makeText 方法Toast 的创建从 makeText() 方法开始:这个方法会调用内部的 makeText 方法,该方法会根据兼容性设置创建 Toast 实例:1.2、Toast 构造方法Toast 的构造方法会初始化关键成员变量:1.3、Looper 获取Toast 必须在有 Looper 的线程中创建:1

387
监听View树ViewTreeObserver深度剖析
Android

监听View树ViewTreeObserver深度剖析

监听View树ViewTreeObserver深度剖析ViewTreeObserver用来监听View视图树的变化,正如它的注释所说:ViewTreeObserver类是final类不可继承,且构造函数默认View包可见。应用只能通过getViewTreeObserver()方法获取:在ViewRootImpl构造的时候,同时也会构造一个AttachInfo,在这mAttachInfo中默认就拥有

1.7k
Android

Android系统文件目录结构

Android系统文件目录结构Android系统目录结构,不管是系统开发还是应用开发,对文件系统目录都要有基本的认识,每个常见目录的作用及含义:/init 系统启动文件/systemapp 系统应用安装目录bin 常用的系统本地命令(二进制),大部分是toolbox的链接(类似于嵌入式Linux中的busybox)etc 系统配置文件,如hostsfont 字体目录framework Java平台

2.5k
Android

Android特有的数据结构:SparseArray

Android特有的数据结构:SparseArraySparseArray ,稀疏数组,是Android中特有的数据结构,从Android 1.0就有,主要目的是为了节省内存。SparseArray 的实现简洁,源码仅500余行,值得学习。1、SparseArray数据存储方式java中的HashMap是采用数组+链表存储(java1.8以后,链表超过8个采用红黑树存储)。而SparseArray

1.8k
Android

ContentObserver内容观察者源码解析

ContentObserver内容观察者源码解析一定要看看ContentObserver源码内部是如何实现观察者模式观察ContentProvider内容的。用它来观察我们感兴趣的ContentProvider是很有用的(见ContentProvider笔记)。1、注册先从ContentResolver注册ContentObserver的registerContentObserver()方法开始:

2.2k
startActivityForResult的原理
Android

startActivityForResult的原理

startActivityForResult的原理在startActivityForResult的用法一文中简单回顾了启动Activity之间传递数据的方法,这样的设计方便了开发者。背后的原理其实很简单,如果熟悉Activity启动流程,不难发现,其实startActivityForResult就穿插在其中。本篇探索startActivityForResult的原理,顺便回顾一下Activity启

2.2k
getSystemService()引起的内存泄漏​
Android

getSystemService()引起的内存泄漏​

getSystemService()引起的内存泄漏通常获取系统服务通过Context的getSystemService(String name)方法,举个例子:每个系统服务都有独一无二的名称对应,其中CONNECTIVITY_SERVICE是定义在Context中的"connectivity":1、getSystemService方法getSystemService(String name)方法是

3.2k
AOSP代码在线搜索:Code Search
Android

AOSP代码在线搜索:Code Search

AOSP代码在线搜索:Code Search阅读源码的时候,一个痛点就是“迷失在茫茫目录中”:找不到类文件在哪、找不到接口的实现类是哪个、找不到方法在哪实现的。比如,看Display相关源码,会发现DisplayManagerGlobal中有一个成员IDisplayManager,对源码结构不熟悉的话,一时找不到这个接口实现在哪里。在Android源码目录结构一文中对AOSP的目录有些许的了解,知

3.1k
SurfaceFlinger启动流程
Android

SurfaceFlinger启动流程

SurfaceFlinger启动流程 好久没有看源码,恰好接触到SurfaceFlinger,简单了解一下SurfaceFlinger。SurfaceFlinger是一个系统服务,接受来自多个来源的数据缓冲区,对它们进行合成,然后发送到显示设备进行显示。在Zygote进程的启动一文中,了解到:在系统启动时,init进程读取位于/android/platform/system/core/rootdi

3.0k
Android

View的setWillNotDraw()方法作用

View的setWillNotDraw()方法作用仅View一个类代码就超过3万行,从头到尾看一遍难度太大。除了记住常用的方法,还有一些不那么常用的。本篇将要介绍的是setWillNotDraw()方法。1、setWillNotDraw() 方法介绍如果调用View的setWillNotDraw(true)方法,也就是给View设置WILL_NOT_DRAW标志,会跳过当前View的绘制,对应Vi

3.0k
Android

ViewStub源码剖析

ViewStub源码剖析之前在ViewStub懒加载一文中记录了如何使用ViewStub懒加载布局,当时没有继续对ViewStub深入研究。现在回头看看ViewStub源码,只有三百多行,属实需要细细品一下。 nukc在看了ViewStub源码之后突发灵感,写了StateView库,吸收了ViewStub的一些特性,内存占用少。从ViewStub的构造函数开始看,ViewStub继承自View,所

1.8k