Android 高级进阶知识整理
Android Framework
启动流程
init 进程启动过程
Android系统启动流程
Zygote启动流程及源码分析
APP启动流程
init进程是Android用户空间第一个进程,主要做以下3件事情:
- 创建和挂载启动所需的文件目录。
- 初始化和启动关键服务,守护关键服务。
- 解析init.rc配置文件,并启动Zygote进程。
- 简述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。
- system_server 为什么要在 Zygote 中启动,而不是由 init 直接启动呢?
- Zygote 作为孵化器,可以提前加载一些资源,当fork出子进程,子进程就会拥有这些进程。
- system_server进程需要JNI函数、共享库、常用类、以及主题资源资源,在init进程中是没有的。
- 为什么要专门使用 Zygote 进程去孵化应用进程,而不是让 system_server 去孵化呢?
- system_server进程包含AMS、WMS等系统服务,在应用进程中是不需要的。
- fork操作仅会把调用线程拷贝到子进程,可能会导致死锁。
- 描述下是怎么导致死锁的?
- fork操作复制整个用户空间(copy-on-write策略)以及所有系统对象,然后只复制当前线程到子线程,其他线程蒸发掉了。
- 当某个线程获取了某个锁,锁会被复制进子进程,在子进程看,锁没有所有者没法解锁,程序发生死锁。
- 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…...
跨平台文件同步:OpenClaw+百川2-13B-4bits量化模型智能归档方案
跨平台文件同步:OpenClaw百川2-13B-4bits量化模型智能归档方案 1. 为什么需要智能文件归档 作为一个长期在多台设备间切换工作的开发者,我的文件管理一直处于混乱状态。同一份文档可能同时存在于Mac的Downloads文件夹、Windows桌面的"临时"目…...
如何用AI4Animation快速制作吸睛的角色动画社交媒体内容
如何用AI4Animation快速制作吸睛的角色动画社交媒体内容 【免费下载链接】AI4Animation Bringing Characters to Life with Computer Brains in Unity 项目地址: https://gitcode.com/GitHub_Trending/ai/AI4Animation AI4Animation是一款基于Unity引擎的角色动画工具&a…...
从父子到祖孙:用Protege玩转OWL属性链推理的3个典型场景
从父子到祖孙:用Protege玩转OWL属性链推理的3个典型场景 家族族谱中"曾祖父"的自动推导、企业架构里"间接上级"的智能识别、生物遗传学里"隔代基因传递"的规律验证——这些看似不相关的场景,其实都藏着同一个知识图谱建模…...
KL46Z电容触摸驱动库:TSI传感器适配与抗干扰实践
1. TSI传感器驱动库技术解析与工程实践1.1 项目背景与定位TSI(Touch Sensing Interface)是NXP Kinetis系列MCU内置的电容式触摸感应外设模块,专为低功耗、高抗噪性的人机交互应用设计。tsi_sensor是一个轻量级、可移植的固件库,面…...
从DH参数到3D动画:手把手教你用SimMechanics在Simulink里‘拼’出一个六轴机械臂
从DH参数到3D动画:手把手教你用SimMechanics在Simulink里‘拼’出一个六轴机械臂 刚接触机器人学的同学常会遇到这样的困境:DH参数表背得滚瓜烂熟,但面对真实的机械臂结构时,那些α、a、d、θ参数突然变得抽象难懂。我在研究生阶段…...
OpenClaw浏览器自动化:Qwen3-14b_int4_awq驱动网页检索与数据抓取
OpenClaw浏览器自动化:Qwen3-14b_int4_awq驱动网页检索与数据抓取 1. 为什么需要浏览器自动化助手 作为一个经常需要收集行业动态的技术博主,我每天要花大量时间在不同网站间切换、搜索关键词、复制粘贴数据。这种重复劳动不仅效率低下,还容…...
嵌入式JPEG解码库JPEGDecoder深度解析
1. JPEGDecoder 库深度技术解析:面向嵌入式显示系统的轻量级 JPEG 解码实践1.1 库定位与工程价值JPEGDecoder 是一个专为资源受限嵌入式平台设计的轻量级 JPEG 解码库,其核心目标并非替代 PC 级全功能解码器,而是在 MCU 级别实现“够用、可控…...
MATLAB频谱分析:从fft到fftshift的实战解读
1. 为什么我们需要频谱分析? 想象一下你正在调试一段音频,听到里面有奇怪的嗡嗡声。作为工程师,你不仅想知道"有杂音",更想知道这个杂音具体是哪个频率成分。这就是频谱分析的用武之地——它像是一把声音的显微镜&#…...
拆解Clonezilla镜像:除了partclone,你还需要知道的底层原理与工具链
拆解Clonezilla镜像:从分卷压缩到文件系统的技术全景解析 当我们需要从Clonezilla备份中提取单个文件时,传统方法往往要求完整恢复整个镜像——这种"全有或全无"的方式在存储资源有限的情况下显得尤为笨重。本文将带您深入Clonezilla镜像的底层…...
CSS 语音参考
CSS 语音参考 概述 CSS(层叠样式表)是网页设计中的核心组成部分,它允许开发者控制网页元素的样式,包括颜色、布局、字体等。在网页设计中,有时我们需要为特定的元素添加语音提示,以便于视觉障碍者或需要语音辅助的用户使用。本文将详细探讨CSS中语音参考的实现方法,包…...
