当前位置: 首页 > news >正文

Android 高级进阶知识整理

Android Framework

启动流程

init 进程启动过程

Android系统启动流程

Zygote启动流程及源码分析

APP启动流程

init进程是Android用户空间第一个进程,主要做以下3件事情:

  • 创建和挂载启动所需的文件目录。
  • 初始化和启动关键服务,守护关键服务。
  • 解析init.rc配置文件,并启动Zygote进程。
  1. 简述Android系统启动流程?
  • 按电源键开机,从ROM加载预制程序启动BootLoader。
  • Bootloader启动Linux内存Kernel,并启动第一个用户空间进程init。
  • init进程创建挂载文件目录,加载属性服务,解析init.rc文件启动Zygote进程。
  • Zygote进程,启动虚拟机,注册JNI服务,预加载系统资源(系统类,字体、资源文件、SO库、Chromium动态库)。创建Socket服务,fork出system_server进程,
  • system_server进程启动AMS、WMS、PMS等系统服务。
  • Zygote进入轮询监听AMS启动应用请求。
  • AMS启动Launcher。
  1. system_server 为什么要在 Zygote 中启动,而不是由 init 直接启动呢?
  • Zygote 作为孵化器,可以提前加载一些资源,当fork出子进程,子进程就会拥有这些进程。
  • system_server进程需要JNI函数、共享库、常用类、以及主题资源资源,在init进程中是没有的。
  1. 为什么要专门使用 Zygote 进程去孵化应用进程,而不是让 system_server 去孵化呢?
  • system_server进程包含AMS、WMS等系统服务,在应用进程中是不需要的。
  • fork操作仅会把调用线程拷贝到子进程,可能会导致死锁。
  1. 描述下是怎么导致死锁的?
  • fork操作复制整个用户空间(copy-on-write策略)以及所有系统对象,然后只复制当前线程到子线程,其他线程蒸发掉了。
  • 当某个线程获取了某个锁,锁会被复制进子进程,在子进程看,锁没有所有者没法解锁,程序发生死锁。
  1. Zygote 为什么不采用 Binder 机制进行 IPC 通信?
  • 先后时序问题,binder需要注册到ServiceManager,Zygote使用binder不能保证创建binder时ServiceManager初始化完成。
  • binder支持多线程操作,可能出现死锁。
  • binder拷贝问题,binder是成对存在的,分为Client端和服务端,fork出应用进程,不能释放无用binder对象,占用内存。
  • LocalSocket效率也很高,而且有权限验证能保证进程通信安全。
  • Socket fork后,应用进程可以关闭。

Android AMS(ATMS)

Android WMS

Activity创建到View的显示过程

Android PMS

PMS(PackageManagerService) 原理

PMS处理APK的复制

事件机制

ViewRootImpl篇

显示框架

Choreographer 详细分析

Android屏幕刷新机制

Android View 的绘制流程

Android显示框架

Android Activity/View/Window/Dialog/Fragment 深层次关联

Binder

Binder机制
为什么使用socket而不使用binder

Handler机制

Android之Handler源码分析

android handler postDelay源码解析

Android消息机制(5)MessageQueue深入解析

ANR触发机制

Android的ANR原理分析
ANR 触发原理与分析
主线程中的Looper.loop()一直无限循环为什么不会造成ANR
主线程的Looper为什么不会导致应用的ANR

管道+epoll

Handle
浅谈Android之Linux pipe/epoll
Android 消息处理以及epoll机制
epoll Android,Android_INotify与Epoll
Linux事件管理机制-epoll

共享内存

fresco mmkv
Android 内存映射mmap浅谈
Android mmap文件读写
mmap原理与解析
MMKV-Android中的存储框架
MMKV组件原理

信号量

matrix xcrash 友盟apm

跨进程通信

爱奇艺Andromeda 跨进程通信组件分析
饿了么 HermesEventBus

JVM

JVM介绍

JVM指令手册

JVM 运行时数据区

Java类的生命周期

浅谈一个Java类的生命周期

Java对象创建过程

JAVA对象的创建过程

Java对象内存布局

Java 对象内存布局详解

Java性能优化之JVM GC

Java垃圾回收(GC)机制

浅析Java虚拟机的垃圾回收机制(GC)

Dalvik & ART

Android 虚拟机 (Dalvik & ART)

android虚拟机与hotspot虚拟机的区别

Android 类加载器

Android插件化框架系列之类加载器

Android插件化框架系列之类加载器

Android 并发编程

Android 并发编程

Android ASM

Android ASM

javassist使用指南

Android Gradle 中的使用ASMified插件生成.class的技巧

AGP 7.x ASM 字节码插桩

自定义 Gradle Transform

Transform 创建自定义插件

Android IOC

IOC框架的实现原理

Android APT

APT技术学习

Android注解

IO

SharedPreference使用及原理分析

SharePreference使用以及原理简析

Sharepreference槽点及改进方案

Java NIO全面详解

mmap内存映射

DMA之理解

Android 内存映射mmap浅谈

Linux 基础I/O

插件化

Android 类加载器

插件化框架 Shadow

Shadow原理分析

RePlugin流程与源码解析

组件化

ARouter的原理

Arouter原理分析

Arouter的原理是什么?

  • 通过注解标记Activity。
  • 通过反射,找到注解标记的类名和包名,并保存。
  • 通过APT技术,根据保存的类名和包名,生成对应的Java代码,这段Java代码的功能就是把activity.class存入路由表,也就是HashMap。
  • 不同业务module需要跳转到对应的Activity时,直接从HashMap中取出对应的activity.class,就可以实现跳转。

图片加载

设计模式
三级缓存

网络库

数据存储

SharePrefrences
MMKV 原理解析

代码检查

Android自定义Lint的二三事儿

APM

BlockCancary

xCrash

Logan

Mars

内存优化

Android性能优化-内存优化

网络优化

Android性能优化-网络优化

卡顿优化

Android性能优化-卡顿优化

电量优化

Android性能优化-电量优化

Android性能优化-包大小优化

Android性能优化-包大小优化

设计模式

Android 设计模式

其他

Android中高级面试必知必会

Android中MotionEvent的来源和ViewRootImpl

AsyncTask,ThreadPoolExcutor,Service之间的关系与区别

Parcelable和Serializable浅析

深入理解Android ClassLoader

四大组件通信核心

系统启动到App 界面完全展示

WebView加载Chromium动态库的过程分析

相关文章:

Android 高级进阶知识整理

Android Framework 启动流程 init 进程启动过程 Android系统启动流程 Zygote启动流程及源码分析 APP启动流程 init进程是Android用户空间第一个进程,主要做以下3件事情: 创建和挂载启动所需的文件目录。初始化和启动关键服务,守护关键…...

一文详解 DolphinDB SQL 标准化

为了提升用户体验,降低用户学习成本和脚本迁移复杂度,自 1.30.17 / 2.00.5 版本开始,DolphinDB 逐步支持了标准化 SQL 的书写方法;并于 1.30.22 / 2.00.10 版本起,对标准 SQL 的常用语法和关键字实现了兼容。 1. 与标…...

ATF(TF-A)安全通告汇总

目录计划如下,相关内容补充中,待完成后进行超链接,敬请期待,欢迎您的关注 1、Advisory TFV-1 (CVE-2016-10319) 2、Advisory TFV-2 (CVE-2017-7564) 3、Advisory TFV-3 (CVE-2017-7563) 4、Advisory TFV-4 (CVE-2017-9607) 5、Ad…...

vuejs 设计与实现 - 简单diff算法

DOM 复用与key的作用: DOM 复用什么时候可复用? key 属性就像虚拟节点的“身份证”号,只要两个虚拟节点的 type属性值和 key 属性值都相同,那么我们就认为它们是相同的,即可以进行 DOM 的复用。即 我们通过【移动】来…...

【前端|Javascript第3篇】探秘JavaScript的作用域与作用域链:小白也能轻松搞懂!

大家好!欢迎来到本篇博客,今天我们将解开JavaScript编程世界中的一道神秘面纱:作用域与作用域链。很多Javascript开发者并不真正理解它们,但这些概念对掌握Javascript至关重要。如果你对这些概念感到困惑,不要担心&…...

【Spring AOP】结合日志面向切面编程 两种写法

概念 这里需要提前了解什么是Spring的AOP(Aspect Oriented Programming)。是在OOP(面向对象)思想的一种拓展思想。简单来说就是将某个代码块嵌入到其它的代码块中。笔者先前学Spring也有学什么IoC啊AOP啊,但实际上没有…...

C#在自动化领域的应用前景与潜力

人机界面(HMI)开发:使用C#开发人机界面软件,实现与自动化设备的交互和监控。C#的图形界面设计能力和丰富的控件库使得开发人员能够创建直观、易用的界面。 数据采集与处理:C#可以与各种传感器、设备进行数据通信和采集…...

string模拟实现:

string模拟实现: 上一篇博客,我们对String类有了一个基本的认识,本篇博客我们来从0~1去模拟实现一个String类,当然我们实现的都是一些常用的接口。 ❓我们这里定义了一个string类型,然后STL标准库里面也有string&#…...

系统与软件安全研究(八)

FUZZ101入门 Detail gcc,clang,llvm都有啥区别GCC (GNU Compiler Collection), Clang, 和 LLVM 都是用于编译代码的工具链。它们在某些方面有相似之处,但也有一些重要的区别。 GCC (GNU Compiler Collection):GCC 是由 GNU 组织开发的,是一个非常流行的开源编译器集合。它…...

jmeter测试rpc接口-使用dubbo框架调用【杭州多测师_王sir】

1.基于SOAP架构。基于XML规范。基于WebService协议。特点:接口地址?wsdl结尾2.基于RPC架构,基于dubbo协议,thrift协议。SpringCloud微服务。3.基于RestFul架构,基于json规范。基于http协议(我们常用的都是这种,cms平台也是) Rest…...

Java8中forEach()里使用return的效果

先总结:使用forEach()处理集合时不能使用break和continue这两个方法,可以使用无返回值的return跳出此次循环,效果同标准for循环的continue。 首先,forEach()先对入参判空,然后使用增强for循环调用action.accept(t)&am…...

MVC配置原理

如果你想保存springboot的mvc配置并且还想自己添加自己的配置就用这个。 视图解析器原理,它会从IOC容器里获取配置好视图解析器的配置类里的视图解析器集合, 然后遍历集合,生成一个一个的视图对象,放入候选 视图里,…...

rabbitmq安装

安装erlang方案二 vi /etc/yum.repos.d/rabbitmq-erlang.repo 文件内容: In /etc/yum.repos.d/rabbitmq-erlang.repo [rabbitmq-erlang] namerabbitmq-erlang baseurlhttps://dl.bintray.com/rabbitmq-erlang/rpm/erlang/22/el/7 gpgcheck1 gpgkeyhttps://dl.bi…...

轻松抓取网页内容!API助力开发者,快速数据采集

在如今这个信息爆炸的时代,人们需要从各种渠道获取数据来支持自己的业务需求。而对于开发者们来说,如何快速、准确地从互联网上抓取所需的数据也成为了一项重要的技能。而抓取网页内容 API 则是一种能够帮助开发者轻松实现数据抓取的工具。 一、什么是抓…...

CSDN 直播:腾讯云大数据 ES 结合 AI 大模型与向量检索的新一代云端检索分析引擎 8月-8号 19:00-20:30

本次沙龙围绕腾讯云大数据ES产品展开,重点介绍了腾讯云ES自研的存算分离技术,以及能与AI大模型和文本搜索深度结合的高性能向量检索能力。同时,本次沙龙还将为我们全方位介绍腾讯云ES重磅推出的Elasticsearch Serverless服务,期待…...

区块链智能合约代码示例

以下是一个简单的区块链智能合约代码示例: pragma solidity ^0.4.17;contract SimpleContract {uint public myData;function setMyData(uint newData) public {myData newData;} }该合约具有以下功能: 定义了一个名为 SimpleContract 的合约。定义了一…...

Spring Boot介绍--快速入门--约定优于配置

文章目录 SpringBoot 基本介绍官方文档Spring Boot 是什么?SpringBoot 快速入门需求/图解说明完成步骤快速入门小结 Spring SpringMVC SpringBoot 的关系总结梳理关系如何理解-约定优于配置 SpringBoot 基本介绍 官方文档 官网: https://spring.io/projects/spring-boot 学习…...

Scons编译lib库

实例目录结构: include文件夹:test.hsrc文件夹:test.cSConscriptSConstruct 如下图所示: SConstruct: #执行当前目录下的SConscript SConscript(SConscript);SConscript: import os from SCons.Script…...

React源码解析18(1)------ React.createElement 和 jsx

1.React.createElement 我们知道在React17版本之前,我们在项目中是一定需要引入react的。 import React from “react” 即便我们有时候没有使用到React,也需要引入。原因是什么呢? 在React项目中,如果我们使用了模板语法JSX&am…...

系列3-常见的高可用MySQL解决方案

高可用主要解决两个问题,如何实现数据共享和同步数据、如何处理failover,数据共享的解决方案一般是SAN,数据同步通过rsync和drbd技术来实现。 1、主从复制解决方案 这是MySQL自身的高可用解决方案,数据同步方法采用的是MySQL rep…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

对WWDC 2025 Keynote 内容的预测

借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错

出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题:3564. 季节性销售分析 题目: 表:sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

Rust 开发环境搭建

环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu ​ 2、Hello World fn main() { println…...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...