1 / 64
文档名称:

android教程(底层).ppt

格式:ppt   大小:4,077KB   页数:64页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

android教程(底层).ppt

上传人:我是药神 2022/7/16 文件大小:3.98 MB

下载得到文件列表

android教程(底层).ppt

相关文档

文档介绍

文档介绍:android教程(底层)
Android的重要特色
HAL
    许多驱动程序以用户态的方式运行,依赖内核的HAL机制。CameraService、SurfaceFlinger、AudioFlinger等都位于用户态。
 
BiFH) 
    , // 系统设置菜单
app_xxx 
    , , 
    , 
    , 
    
1号进程init的处理过程:GUI
假设一个极端的硬件环境:
中低端手机CPU:250-500MHz
L1缓存: 16-32K(无L2)
总线:100MHz
此时,系统里至少有40个必备的进程在运行
应用程序可用内存:20MB
Home现在还没启动……
了解程序
虚拟机运行机制
GUI机制
 
进程与线程
虚拟机的C/S创建机制
字节码程序都是用app_process运行的。app_process负责也设置用户和组、内存、检查JNI函数、检查字节码、初始化虚拟机等等脏活累活。
class AppRuntime:           <sdk>/frameworks/base/cmds/app_process/
class AndroidRuntime:    <sdk>/frameworks/base/core/jni/
 
init创建的app_process进程被称为zygote(受精卵)。运行后创建socket:/dev/socket/zygote,侦听和处理运行字节码程序的请求
line 243: service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
    socket zygote stream 666     onrestart write /sys/android_power/request_state wake     onrestart write /sys/power/state on  
 
init设置了参数“--zygote”,进入服务模式。具体实现在Java类:
    
Zygote服务器
zygote在完成了虚拟机的初始化后,启动UNIX domain socket服务,循环接受命令,提供创建虚拟机的服务。 
void run() throws {     int loopCount = ;     while (true) {         if (loopCount <= 0) {             ();             loopCount = ;         } else {             loopCount--;         }         if (runOnce()) {             break;         }     } }
之后,当需要运行manifest文件中的<activity>,<service>,<receiver>和<provider>中的类时,就会通过socket向zygote发送启动命令。
进程的执行主要有两种情况:
receiver收到特定的响应动作后,自动运行()
手动运行(实质是被其他程序通过StartActivity等函数启动的)
Java程序的进程创建与执行
进程的创建是通过向Zygote服务器提交请求来实现的。
frameworks/base/core/java/android/os/ 542:
pid = zygoteSendArgsAndGetPid(argsForZygote);
 
zygote收到命令后,在runOnce()函数中fork一个子进程:
( 212)
pid = (, pars