揭秘Zygote:安卓App的基因密码

【Android FrameWork】Zygote Zygote做为一个孵化器,会提前加载一些系统资源、创建Java虚拟机、注册JNI等等,这样子进程就可以直接使用,避免重复加载。比如Zygote中的JNI函数、主题资源等等。 阅读详情
要深入理解 Zygote 到底给每个 App “遗传”了什么,我们需要从内存的物理分布和代码的预加载逻辑来看。
Zygote 就像一个预先搭建好的“精装房”,App 搬进去时,家具(系统类、资源)都已经摆好了。

1. Zygote 预加载的“重量级”资源

在 Android 源码的 ZygoteInit.java 中,有两个核心方法定义了共享内容:
A. 预加载类 (Preloaded Classes)
Zygote 会加载约 3000~5000 个核心 Java 类。
  • 内容:包括 java.lang.*、android.app.*、android.view.*、android.widget.* 等。
  • 存储:这些类被加载进内存后,其对应的映射关系存在于 线性分配区 (LinearAlloc)。
  • 共享效果:当你新建一个 TextView 时,系统不需要去磁盘找 TextView.class,它已经在内存里等着你了。
B. 预加载资源 (Preloaded Resources)
  • 内容:系统级别的图片(如 Checkbox 的勾选框、ProgressBar 的转圈动画)、布局文件以及系统颜色定义(framework-res.apk 中的内容)。
  • 共享效果:所有 App 使用的系统原生图标,在物理内存中其实只有一份。

2. 内存视图:物理内存 vs 虚拟内存

理解资源共享的关键在于 内存页(Memory Pages)。
  • Clean Pages (干净页):Zygote 加载的只读代码段(.text)和预加载资源。这些页在所有 App 进程中完全共享,不占额外的物理内存。
  • Dirty Pages (脏页):App 运行后自己创建的对象(如你的全局变量、Bitmap)。这些是每个进程私有的。

3. 如何通过工具观察这种“共享”?

如果你有 root 权限,可以在终端通过 procrank 命令查看一个进程的内存占用,你会发现三个关键指标:
  1. VSS (Virtual Set Size):虚拟耗用内存(包含共享库占用的全部内存,数值最大,参考意义小)。
  2. RSS (Resident Set Size):实际使用物理内存(包含共享库占用的全部内存,会被重复计算)。
  3. PSS (Proportional Set Size):比例分配内存(最科学指标)。
  • 原理:如果有 10 个进程共享 Zygote 的 100MB 资源,那么每个 App 的 PSS 只会计算其中的 10MB。

4. UID/GID 权限的“遗传”与隔离

在 fork 的瞬间,子进程继承了 Zygote 的所有权限,但紧接着 Zygote 会执行 NativeSpecializeAppProcess:
  1. 身份切换:调用 Linux 系统调用 setresuid(uid, uid, uid)。
  2. 能力封印 (Capabilities):清除不必要的 Root 能力,只保留该 UID 对应的权限。
  3. SELinux 赋能:根据 App 的包名分配 SELinux 标签(如 u:r:untrusted_app:s0),即使 UID 逃逸,SELinux 也会在内核层限制其访问系统文件。

5. 总结:这种架构的优缺点

维度
优势
劣势
性能
秒级启动,省去了 JVM 初始化和类加载时间。
Zygote 进程如果崩溃,整个 Android 用户界面都会重启。
内存
极大地提高了多任务并行的能力,节省约 30% 以上内存。
预加载列表过长会导致系统开机变慢。
安全
严格的 UID 隔离,确保 App 互不干扰。
如果 Zygote 存在漏洞,所有子进程都可能受到威胁。
Process系列—创建APP进程原理 APP进程的创建流程 本文要介绍的是Zygote fork进程——>APP进程过程,先简单说说进程与线程的区别。 进程:每个App在启动前必须先创建一个进程,该进程是由Zygote fork出来的,进程具有独立的资源空间,用于承载App上运行的各种Activity/Service等组件。进程对于上层应用来说是完全透明的,这也是google有意为之,让App程序都是运行在Android Run... 阅读详情

相关推荐

AndroidP_应用进程启动流程的梳理

前言 本来是要将之前Activity冷启动流程继续梳理清楚的,到了中间看到当进程尚未启动还需要启动新的进程,这也是需要梳理清楚的,于是就先将进程启动流程在源码层面给梳理一遍. 流程图 先上图,有个概况了解才能有梳理的方向: 源码 建议在进入源码阅读之前,先将上面的流程图大概的进行两遍左右的阅读,然后相信会对下面的源码梳理的理解有很大的帮助: 1. AMS.startProcess 我们在开发中中应该知道,应用进程的管理通常是由AMS来进行的,但是进程的启动也是由AMS来发起的【虽然是AMS发起的,但是创建

c++ 中的符号-> 776

如何打开疯狂的android讲义源码_【Smith】Riru框架源码阅读

终于更换了一个封面阅读本文,切勿错过《【Smith】Riru框架原理介绍》。阅读本文,切勿错过《【Smith】Riru框架原理介绍》。阅读本文,切勿错过《【Smith】Riru框架原理介绍》。通过上一篇文章介绍,我们已经知道,Riru是一个Android注入框架。本篇我们来仔细其源码,以便了解其具体做了哪些事情。Riru源码地址:https://github.com/RikkaApps/...

weixin_39684960的博客 998

Android6.0系统启动流程分析二:zygote进程

上一篇Android6.0系统启动流程分析一:init进程博客我们分析了init进程,主要分析了init.rc的解析过程和command的执行流程。我们说Init.rc中配置的service都是在init.rc中的action中使用start命令启动的,start命令对应的处理函数是do_start。我们也分析了这个函数。那么这一节,我们分析zygote进程,zygote进程在init.rc中也被配置

阳光玻璃杯 2756

Android 11 进程启动分析(一): Zygote进程

基于Android 11 的进程启动分析

2384

告别编译失败:详解Keil MDK中ARM编译器V5与V6的区别及项目迁移选择

本文深入解析Keil MDK中ARM编译器V5与V6的核心差异,提供STM32项目迁移的完整指南。从代码生成策略、优化重点到语法支持,详细对比两版本特性,并给出项目兼容性评估框架和双版本共存配置方案,帮助开发者高效解决编译器版本冲突问题。

weixin_28684757的博客 516

具有I2S输出的多模数字麦克风ICS-43434咪头LR引脚接地或电源WS接LRCLK

ICS-43434 是一款数字 IS 输出底部收音孔麦克风。完整的 ICS-43434 解决方案包括 MEMS 传感器、信号调理、模数转换器、抽取和抗混叠滤波器、电源管理以及行业标准的 24 位 12S 接口。12S 接口允许 ICS-43434 直接连接到数字处理器,例如 DSP 和微控制器,而无需系统中的音频编解码器。

易板 5665

揭秘Android进程家族:Zygote的遗传密码

都是 Zygote 镜像的克隆。它们共享了系统最沉重的“基础设施内存”,从而保证了 Android 系统的多任务高效运行。从 Zygote 那里继承了大量的内存空间。(虚拟地址到物理地址的索引),而没有复制物理内存。Copy-on-Write (COW,写时拷贝)之间的关系想象成一个“家族遗传”系统。等资源映射到了它的虚拟地址空间(例如。Zygote (受精卵进程)Dalvik/ART 虚拟机。由于采用了 Linux 的。的瞬间,物理内存是共享的。发生时,操作系统只是复制了。技术,App 进程和。

新时代农民工 525

在Redroid容器中构建Frida RPC服务:自动化生成淘宝X-Sign签名参数

本文详细介绍了在Redroid容器中构建Frida RPC服务,实现自动化生成淘宝X-Sign等签名参数的完整方案。通过逆向分析定位关键方法,定制Redroid系统使Frida-Server常驻运行,并编写Frida脚本将签名方法暴露为RPC接口,最终封装为可远程调用的微服务,解决了签名生成的可移植性与工程化难题。

ice55的博客 645

Android系统启动流程全解析:从Bootloader到Launcher的底层揭秘

操作系统从按下电源键到桌面可交互,背后是一条由引导加载、内核初始化、进程孵化、系统服务注册串联而成的复杂链路。理解Android启动流程,是排查开机慢、自启动失效、系统服务崩溃等问题的关键前提。从Bootloader校验签名,到init进程解析脚本,再到Zygote孵化应用进程、SystemServer承载核心服务,每一个环节都深刻影响着设备稳定性和用户体验。本文以时序与问题双线并行,梳理各阶段的职责与常见故障,并给出bootchart、dmesg、logcat等实用排查工具。掌握这套路径,开发者能更精准地

weixin_34252686的博客 369

使用Matlab进行IEEE 33节点潮流计算的NR法实现详解及应用实例

IEEE 33节点系统是一个标准的配电系统模型,广泛用于学术研究和工程应用。该系统由33个节点和37条线路组成,结构复杂,具有代表性。其潮流计算结果可用于验证各种潮流计算方法的准确性和效率。NR法是一种基于迭代求解的潮流计算方法,通过不断迭代求解非线性方程组,直到达到预定的收敛条件。NR法具有收敛速度快、计算精度高的优点,适用于大规模复杂电力系统的潮流计算。

m0_57781768的博客 2071

液晶电视维修必看:TCON逻辑板故障排查全指南(附常见问题解决方案)

本文详细解析了液晶电视TCON逻辑板的工作原理与故障排查方法,涵盖LVDS信号处理、DC-DC电压系统等核心知识。提供从基础测量到高级维修的完整指南,帮助技术人员快速诊断黑屏、竖线等常见故障,并给出预防性维护建议,提升维修效率与成功率。

weixin_42535461的博客 616

Android软硬整合设计与框架揭秘: HAL&Framework &Native Service &App&Browser架构设计与实战开发

在软硬整合领域, Android以其对软件和硬件的高度开放性引领了当今的软硬整合潮流,全世界正在进行一场轰轰烈烈的Android运动,Android以不可思议的速度渗透越来越广的领域,Android智能手机、Android智能电视、Android微波炉、Android平板电脑、Android智能机器人、Android车载系统等越来越多的Android产品涌入人们的工作和生活中,自从Google的A

wangruoze的专栏 2178

学好超几何分布的核心公式,破解双色球!

彩票本质是概率游戏,不存在"必中公式"科学投注的核心是风险收益比管理长期投注的期望值始终为负(理论回报率约47%-63%)数学维度:运用概率工具优化策略经济维度:控制投注成本在可承受范围人文维度:将彩票视为社会公益的参与方式通过本文构建的数学模型,彩民可以在概率框架内实现更理性的投注决策。但最终能否收获幸运,仍取决于那个永恒的未知数——概率女神的眷顾。一、超几何分布的核心公式。

weixin_44904675的博客 1万+

王家林最受欢迎的一站式云计算大数据和移动互联网解决方案课程 V1之Android架构设计和实现完整训练:HAL&Framework&Native Service&Android Service&Bes

如何理解Android架构设计的初心并开发出搭载Android系统并且具备深度定制和软硬整合能力特色产品,是本课程解决的问题。 课程以Android的五大核心:HAL、Binder、NativeService、Android Service(并以AMS和WMS为例)、View System为主轴,一次性彻底掌握Android的精髓。 之所以是开发Android产品的必修课,缘起于: 1,  

Rocky_wangjialin的专栏 2159

基于阿里云物联网平台设计的实时图传系统_采用MQTT协议传输图像

当前基于MQTT协议设计了一个实时图传系统,通过这个项目来演示,两个MQTT设备如何互相订阅,进行消息流转。 在阿里云服务器上创建2个设备,分为为设备A和设备B;设备A负责采集本地摄像头画面上传,设备B负责接收设备A上传的数据然后解析显示出来。在阿里云服务器上需要配置云产品流转,让设备A的数据上传后自动发送给设备B。这样就完成了视频画面数据的流转。不过因为阿里云的最大数据限制,每次最大发送10240字节的数据。

1万+

ABAP Channels 实战:在 ABAP 7.40 中用 WebSocket 打造实时双向通信

本文详细介绍了SAP ABAP 7.40引入的ABAP Channels通信框架,包含AMC(ABAP Messaging Channels)和APC(ABAP Push Channels)两部分。AMC作为应用服务器内部的消息总线,支持发布/订阅模式,可实现跨会话实时通信;APC基于WebSocket协议,用于浏览器等客户端与ABAP服务器的双向实时交互。文章通过一个乒乓球游戏案例展示了ABAP Channels的实时协作能力,并详细解析了AMC的配置方法、消息发送与接收的代码实现,帮助开发者理解如何利用

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 224

Android P (9.0) 之Zygote进程源码分析

概述 init进程是用户空间的第一个进程,而zygote进程则是第一个java进程。zygote进程是init进程的子进程,init进程通过解析rc文件,运行了zygote进程。 zygote是Android系统中一个相当重要的进程,它的主要功能就是执行Android应用程序。在Android系统中运行新的应用,如同卵子受精分裂一样,需要跟Zygote进程(拥有应用程序运行时所需要的各种元素和条件...

wangzaieee的博客 1567

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Android源码阅读---zygote(app_process)进程

Android源码阅读—zygote(app_process)进程 文章目录Android源码阅读---zygote(app_process)进程1. app_processpe的启动2. main函数流程3. 创建java运行环境4. ZygoteInit类主函数4.1 registerZygoteSocket4.2 preload4.3 startSystemServer4.3 runSele...

helloWen 2267

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Android5.1.1源码 - zygote fork出的子进程如何权限降级

前言 如果不知道zygote是什么,或者好奇zygote如何启动,可以去看老罗的文章: Android系统进程Zygote启动过程的源代码分析 所有Android应用进程都是zygote fork出来的,新fork出来的应用进程还保持着root权限,这显然是不被允许的,所以这个fork出来的子进程的权限需要被降级,本文说的就是Androi...

weixin_34049032的博客 342

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Zygote进程启动过程源代码分析

Android系统借用Binder通信机制实现了C/S架构设计,客户端应用程序如需要实现某些功能,只需请求指定的服务,由服务端来实现。Android服务包括以上的系统服务和应用服务,系统服务是指Android系统在启动过程就已经启动实现了的服务,对于系统服务又分为Java服务和本地服务,其实很好区分,Java服务是由Java代码编写而成,由SystemServer进程提供,而本地服务是由C/C++实现的服务,由Init进程在系统启动时启动的服务。应用服务是由开发者自行实现的某些特定服务。对于本地系统服务,我

深入剖析Android系统 8361

Android Framework | 一种新型的应用启动机制:USAP

本文分析基于Android R 前言 一说到应用启动,估计大伙儿就会想到zygote进程。确实,正如其中文释义“受精卵”一样,其主要的作用就是孵化出一个又一个的应用进程。 传统的应用启动模式由system_server中的AMS接收请求,之后通过socket告知zygote,让其完成fork动作,这样新进程便创建出来。不过从Android Q(10)开始,Google引入了一种新的机制:USAP(Unspecialized App Process)。通过prefork的方式提前创建好一批进程,当有应用启

纸上得来终觉浅,绝知此事要躬行 8158

Android 传感器hal层分析

Android系统内置对传感器有很多,它们分别是:加速度传感器gsensor(accelerometer)、磁力传感器(magnetic field)、方向传感器(orientation)、陀螺仪(gyroscope)、环境光照传感器(light)、压力传感器(pressure)、温度传感器(temperature)和距离传感器(proximity)等。 Android实现传感器系统代码位置

新时代农民工 3719

Android的守护进程ServiceManager

ServiceManager是Android系统中的一个重要守护进程,它负责管理系统服务的注册、查找和启动。

新时代农民工 1754

Android进程空间:framework与services的深度解析

这是驱动工程师的“主战场”。从驱动工程师的视角来看,Android 的进程树不仅仅是 PID 的递增,它实际上是一条从。(是构建整个系统的基石。要从进程的角度理解它们,我们可以把它们想象成“随身工具箱”调用链(Call Stack)以及是否发生了跨进程通信(IPC/Binder)哪个进程的虚拟机(ART/Dalvik)加载了这些类?的一个静态变量,只有你自己的 App 能看到改动;里改了一个静态变量,全系统的行为可能都会跟着改变。Java 进程 (Zygote 的子孙)的(多份实例,各进程一份),而。

新时代农民工 1000

android 自带 浏览器的默认标签

分别在一下资源文件中添加自定义的标签 packages\apps\Browser\res\values\strings.xml         Google         http://www.google.com/         Picasa         http://picasaweb.google.com/         Yahoo!         http:/

新时代农民工 814

linux 常用命令

Linux使用中常用命令,列出方便记忆与使用 1:sudo chown xinwu:xinwu crane-chip 授权命令 2:tar -czxf fileName 解压 3:cp "xinwu/linux" "android/" -r 复制 4:tar -czvf xxxx.tar.gz system 压缩         .tar   解包:tar xzvf FileN

新时代农民工 691
上一篇: 揭秘Android启动机制:Zygote如何优化内存
下一篇: 揭秘Android进程家族:Zygote的遗传密码
WythePlus
博客等级 码龄11年 397粉丝 300原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值