内容简介编辑《android的设计与实现:卷i》是android应用开发工程师和android系统工程师进阶修炼的必读之作。
它由资深android内核专家亲自执笔,从源代码角度,系统、深入、透彻剖析android系统框架层(framework)的设计思想和实现原理,为android应用工程师和系统工程师解决实际工作中的各种难题提供了原理性的指导。
为了降低读者的阅读成本,《android的设计与实现:卷i》使用了大量简单的uml类图和序列图来展示类的层次结构和方法的调用流程,使读者能迅速读完《android的设计与实现:卷i》并领会其精髓!“android的设计与实现”系列丛书主要围绕android系统的四层结构展开,通过源代码来分析各层的设计思想与实现原理,卷i则主要是针对framework(框架层)的。
全书共12章,分为六个部分:基础篇(第1~2章)详细讲解了android的体系结构、源代码阅读和调试环境的搭建,以及整个框架的基础;
启动篇(第3~4章)深入分析了android启动过程的机制和实现原理,能帮助读者全面理解框架层系统服务的运行基础;
binder篇(第5~6章)着重分析了binder在native框架层和java框架层的机制和实现,能让读者深入理解进程间的通信模型;
消息通信篇(第7章)重点分析了android的消息驱动和异步处理机制,能让读者深入理解线程间的通信模型;
packagemanager篇(第8~9章)主要讲解了packagemanager的机制与实现,以及apk的安装方法与过程;
activitymanager篇(第10~12章)深入阐述了activitymanagerservice的运行机制、应用程序和进程的启动流程,以及进程管理机制。
《android的设计与实现:卷i》适合中高级的android应用开发工程师、android系统开发工程师、android系统架构师,以及负责对android系统进行调试和优化的工程师们阅读。
3前言编辑为什么要写《Android的设计与实现:卷I》  Android从2007年问世至今,不仅在各个应用领域发展得如火如荼,其图书市场也是一片“兴旺”,各个层次、各种类型的Android图书的需求都比较旺盛。
目前市场上已经有的图书主要分为以下三类:  针对AndroidSDKAPI使用的描述  针对Android系统架构各部分的描述  针对Kernel移植的描述  其中鲜有针对Android四层架构中某一层进行深入挖掘的图书,这让读者有一种只能窥其全貌,却不能独得一隅的遗憾。
  框架层是整个Android系统的灵魂,这一层起着承上启下的作用,是理解整个Android的关键,也是解决Android应用层Bug的关键。
要开发一款精品手机,就必须深入理解这一层。
  国际知名的手机厂商对手机品质有着近乎苛刻的要求,手机必须在严格的测试环境下运行数百小时无问题方可上市销售。
这期间出现的稳定性(ANR、Crash、Watchdog)、内存(OOM)、性能等问题都让人十分头痛。
这些问题主要来自于应用程序、Framework、Dalvik虚拟机、LinuxKernel、Driver以及Modem,其中相当大一部分问题源自对Framework的错误理解和使用。
举例如下:  解决KeyDispatchTimeout类型的ANR,需要熟悉ActivityManager、Input消息处理系统的机制。
  解决应用程序IDLE状态时发生的ANR,需要熟悉ActivityManager、Binder的运行机制。
  解决框架层的Watchdog问题,需要熟悉Android启动阶段开启的系统服务和Watchdog的运行机制。
  解决应用程序的性能问题,同样需要理解框架层的运行和调度机制。
  上述问题只是冰山一角,仅仅停留在使用SDKAPI的层次是不可能解决上述问题的。
因此,非常需要一本能深入挖掘框架层的专著。
  针对以上问题,编写“Android的设计与实现”系列丛书,对Android核心模块和主要问题进行深入分析。
其中卷I的主题是启动和通信,主要分析Android运行环境、PackageManager、ActivityManager、Binder和消息机制等核心模块。
卷Ⅱ的主题是资源和UI,主要分析ContentProvider、Resource、ViewSystem、WindowManager、SurfaceFlinger等核心模块。
  读者对象  《Android的设计与实现:卷I》主要分析了Android框架层主要部分的体系结构和实现原理,让读者对Framework有一个清晰的理解,并以此增强解决
2024/5/21 8:05:22 55.77MB Android 设计与实现 卷1 带完整书签
1
在完成嵌入式应用的Linux裁减后,Linux的启动时间仍需要7s左右,虽然勉强可以接受,但仍然没有达到我个人所追求的目标——2s以内。
CELF论坛为我们指引了一个方向,本文介绍了该论坛提出的对Linux的启动时间进行优化步骤:首先是对Linux启动过程的跟踪和分析,生成详细的启动时间报告;
然后,我们就来通过这份报告,找出启动中相对耗时的过程;
接下来,进行具体的分项优化。
2024/3/27 2:39:38 29KB 软件
1
本人收葳以久的config.sysSMARTDRV.EXEHIMEM.SYSdiskgen.exeDOS三个基本启动文件COMMAND.COMMS-DOS.SYSIO.SYS启动DOS用到的文件描  述:IO.SYS是dos环境控制输入输出的文件,不可以少。
COMMAND.COM是Windows9X中的DOS外壳程序(SHELL),较DOS6.22仅增加了部分内部命令,没有更新的东西。
  IO.SYS对COMMAND.COM的处理则有了根本改变,当Win9X在CONFIG.SYS中加载EMM386.EXE驱动提供UMB时,COMMAND.COM的常驻部分装入HMA,暂驻部分装入UMB中(在DOS6.22中,COMMAND.COM只能将常驻部分装入HMA),这将为DOS程序提供更大的常规内存,也不需要反复从磁盘中恢复暂驻部分,有效地提高了系统性能。
当然,如果没有加载EMM386.EXE,系统不提供UMB,COMMAND.COM的暂驻部分就只能象DOS6.22那样置于常规内存的高端。
  DOS内部命令的程序代码存放在command.com文件中,它在DOS系统启动的时候随DOS的启动模块一起被调入计算机内存。
MSDOS.SYS是DOS的三个核心文件之一,另外两个是command.com、IO.SYS  MSDOS.SYS在微软非NT内核的操作系统中经常可以看到它,具有只读、系统、隐藏三个属性,因此在WINDOWS中是看不到的,可以通过“文件夹选项”中“显示系统文件”和“显示所有文件”来显示它,如果改它的属性在WINDOWS中只能改只读和隐藏两个属性,不能改系统属性,但是可以在命令行形式下改attrib-smsdos.sys  MSDOS.SYS可以修改,但改坏了可能会导致系统无法启动,可以用记事本打开,内面是一些启动参数,如:开机时显示不显示菜单、开机时进行磁盘扫描吗、开机时显不显示LOGO等等。
  1、MSDOS.SYS的作用  在Win9X中,MSDOS.SYS变成了纯文本系统配置文件,用于控制Win的启动方式。
可以在DOS模式下解除其特殊属性(只读、隐藏、系统),根据需要自行配置。
MSDOS.SYS可以是空文件,甚至可以删除,当然此时系统只能以纯DOS方式启动,不能进入GUI系统。
  不同方式形成的MSDOS.SYS默认内容不同,主要有四种,其中前三种方法形成的MSDOS.SYS文件无任何配置命令,几乎是空文件,仅保留一行注释,以说明该文件形成方式,这类文件多见于系统软盘中。
不同的MSDOS.SYS内容如下:  1)Win安装时建立的系统盘:;Win95EBO  2)FORMAT/S建立的系统盘:;FORMAT  3)SYSA:传递建立系统盘:;SYS  4)建立系统时在硬盘上形成的MSDOS.SYS  系统硬盘中的MSDOS.SYS内容比较完整,包括必要的启动配置命令,文件长度必须大于1024bytes,即占用两个以上磁盘扇区,这一要求在该文件中说明为保证兼容性,但从未见更深入的介绍,实际上文件小于1024bytes对系统并无明显影响,该要求估计是为了保证系统与旧版DOS和Win3.X兼容而提出的,这一点尚望行家指教。
  用SYS向硬盘传送系统以修复启动文件时,将覆盖引导记录、IO.SYS和COMMAND.COM,MSDOS.SYS的内容保持不变,保证系统引导部分修复后,整个系统仍能正常启动,这一做法非常聪明。
  2、MSDOS.SYS的配置参数  MSDOS.SYS由三小节组成,其各配置参数无顺序要求,内容如下:  [PATHS]  指定Windows的系统文件路径  WinDir=  指定Win9X各系统文件及其子目录所在的目录  该路径必须包括注册表文件SYSTEM.DAT和Win9X启动必需的驱动程序,如HIMEM.SYS等  WinBootDir=  指定Win9X的GUI启动程序Win.COM所在的目录  HostWinBootDrv=指定Win.COM所在的驱动器,不需冒号(:)  UninstallDir=  指定保存原系统的目录,便于自身删除时恢复原系统用  该参数出现在Win的升级版本中  [OPTIONS]指定Windows的启动方式,/前的值为缺省值  LOGO=1/0  允许/禁止启动时显示Win9X标志(LOGO)  屏蔽该画面有时可解决第三方内存管理程序造成的冲突  看到系统启动过程出现的提示信息,也使系统启动稍快,启动  启动时可用ESC键清除Win9X标志,查看实模式启动信
2024/2/9 1:49:09 507KB COMMAND.COM MS-DOS IO.SYS
1
kernel启动过程和kernel核心结构
2023/12/8 14:45:37 757.23MB arm
1
西 南 交 通 大 学 学 报--永磁同步电机伺服系统中电机启动过程分析.pdf
2023/12/3 3:02:14 277KB 永磁同步电机 启动过程
1
主要介绍lte技术下,ue终端启动过程的流程,包括小区搜索,系统消息解析,随机接入过程,寻呼等内容。
2023/8/25 1:02:03 2.45MB lte ue 系统信息 随机接入过程
1
史上最详细最片面的uboot启动过程分析,看完之后能对UBOOT有个片面的了解。
绝对独家史上最好的UBOOT分析教程。
2020/10/1 5:06:39 324KB uboot u-boot
1
实验一Linux系统的安装及用户界面的使用一.实验目的1.了解Linux系统的安装、熟悉系统的启动过程和使用环境。
2.掌握Linux环境下vi编辑器的使用方法。
3.掌握Linux系统中编辑、编译、调试、运行一个C语言程序的全过程。
二.实验内容1、实验要求1.在VMWare虚拟机环境或真实物理机器上,安装一个Linux操作系统。
2.体验Linux操作系统中XWindows系统的使用。
3.尝试Linux系统键盘命令的使用,并熟练掌握常用的基本命令。
4.掌握命令行方式下vi编辑器的使用。
5.编写一段C程序,使用系统调用fork()创建两个子进程。
各进程显示不同的信息,如父进程显示字符“a”,子进程分别显示字符“b”和“c”。
多次运行观察显示结果,并分析产生这种执行效果的原因。
实验二Linux进程控制一.实验目的1.掌握进程的概念,明确进程和程序的区别。
2.认识和了解并发执行的实质。
二.实验内容1、实验要求1.编写一段程序,使用系统调用fork()创建两个子进程。
各进程显示不同的信息,如父进程显示字符“a”,子进程分别显示字符“b”和“c”。
多次运行观察显示结果,并分析产生这种执行效果的原因。
2.修改上面编写的程序,将每个进程的输出由单个字符改为循环输出一句话,如父进程显示:“parent:”加上进程ID,子进程分别显示:“Child1:”(或“Child2:”)加上自己的进程ID。
再观察程序执行时屏幕上出现的现象,并分析原因。
3.一个父进程创建一个子进程,子进程通过exec系统调用执行另一个文件。
各自的代码中显示不同的信息,观察其运行结果,分析两个进程并发执行的效果。
4.编写程序创建如图所示的进程树,在每个进程中显示当前进程ID和父进程ID。
实验三Linux进程间通信一.实验目的(1)分析进程争用临界资源的现象,学习处理进程互斥的方法;
(2)学习如何利用进程的“软中断”、管道机制进行进程间的通信,并加深对上述通信机制的理解;
(3)了解系统调用pipe()、msgget()、msgsnd()、msgrcv()、msgctl()、shmget()、shmat()、shmdt()、shmctl()的功能和实现过程,利用共享存储区机制进行进程间通信。
二、实验内容1、实验要求(1)进程的控制修改已编制的程序,将每个进程输出一个字符修改为每个进程输出一句话,再观察程序执行时屏幕上出现的现象,并分析出现问题的原因,进一步理解各个进程争夺临界资源的情况。
如果在程序中使用系统调用locking()来给每一个进程加锁,可以实现进程之间的互斥,试观察并分析出现的现象。
(2)进程的软中断通讯编制一段程序,实现进程的软中断通讯:使用系统调用fork()创建两个子进程;
再使用系统调用signal()让父进程捕捉键盘上来的中断信号(即按Del键);
在捕捉到中断信号后,父进程用系统调用kill()向两个子进程发信号;
子进程捕捉到信号后分别输出下列信息后终止:Childprocess1iskilledbyparent!Childprocess2iskilledbyparent!父进程等待两个子进程都终止以后,输出如下信息后终止:Parentprocessinkilled!(3)进程的管道通讯编制一段程序,实现进程的管道通讯:使用系统调用pipe()建立一条管道线;
两个子进程分别循环向这条管道写一句话:Child1issendingamessage!Child2issendingamessage!而父进程则循环从管道中读出信息,显示在屏幕上。
实验报告内含源代码
2019/6/17 5:27:26 267KB ubuntu
1
已知铣床主拖动电机晶闸管供电的双闭环直流调速系统如图2-1所示,整流装置采用三相桥式电路,基本数据如下:•直流电动机:额定电枢电压=220V,额定电枢电流=55A,额定转速=1000r/min,电动机电动势系数Ce=0.1925Vmin/r,允许过载倍数λ=1.5;
•晶闸管装置放大系数:Ks=44;
整流装置平均滞后时间常数=0.00167s,•电枢回路总电阻:R=1.0Ω;
•时间常数:电枢回路电磁时间常数=0.017s,电力拖动系统机电时间常数Tm=0.075s;
•电枢电流反馈系数:β=0.121V/A(≈10V/1.5),电流滤波时间常数=0.002s;
•转速反馈系数α=0.01V.min/r(≈10V/);
转速滤波时间常数=0.01s;
设计要求:图2-1转速电流双闭环调速系统框图(1)用工程设计法设计电流调理器,电流超调量≤5%;
(2)用工程设计法设计转速调理器,实现转速无静差,空载起动到额定转速时的转速超调量≤20%。
(3)在Matlab仿真软件中构建仿真模型;
(4)根据仿真结果修正和调整并确定转速调理器的比例增益和积分时间常数,并用Plot函数绘制理想空载转速下,设定转速800r/min下电机启动过程,转速和电枢电流波形。
(5)根据仿真结果修正和调整并确定转速调理器的比例增益和积分时间常数,在负载电流=35A下从零速启动,达到设定转速800r/min后,经过15s负载电流增大到=45A,并用Plot函数绘制此过程中转速和电枢电流波形。
(6)对仿真波形及结果进行分析。
1
在日常工作中,钉钉打卡成了我生活中不可或缺的一部分。然而,有时候这个看似简单的任务却给我带来了不少烦恼。 每天早晚,我总是得牢记打开钉钉应用,点击"工作台",再找到"考勤打卡"进行签到。有时候因为工作忙碌,会忘记打卡,导致考勤异常,影响当月的工作评价。而且,由于我使用的是苹果手机,有时候系统更新后,钉钉的某些功能会出现异常,使得打卡变得更加麻烦。 另外,我的家人使用的是安卓手机,他们也经常抱怨钉钉打卡的繁琐。尤其是对于那些不太熟悉手机操作的长辈来说,每次打卡都是一次挑战。他们总是担心自己会操作失误,导致打卡失败。 为了解决这些烦恼,我开始思考是否可以通过编写一个全自动化脚本来实现钉钉打卡。经过一段时间的摸索和学习,我终于成功编写出了一个适用于苹果和安卓系统的钉钉打卡脚本。
2024-04-09 15:03 15KB 钉钉 钉钉打卡