深入Android系统
文章平均质量分 94
apigfly
热爱编程
展开
-
深入Android系统(十二)Android图形显示系统-2-SurfaceFlinger与图像输出
最近有些忙,切实体验了一把拖更的羞耻感 ( *︾▽︾)本文和上一篇深入Android系统(十二)Android图形显示系统-1-显示原理与Surface关系比较密切,撸完前篇更易理解本文啦 (๑‾ ꇴ ‾๑)了解SurfaceFlinger之前我们需要先了解下OpenGL相关的一些知识OpenGL ES与EGLOpenGL一般OpenGL被认为是一个API(Application Programming Interface, 应用程序编程接口),包含了一系列可以操作图形、图像的函数。然而,Op原创 2021-05-03 22:17:46 · 1517 阅读 · 1 评论 -
深入Android系统(十二)Android图形显示系统-1-显示原理与Surface
关于图形显示部分可以参考官网:Graphics图像显示原理Linux通常使用Framebuffer来用作显示输出(Framebuffer知识详解在这里),Framebuffer就是一块内存区域,它通常是显示驱动的内部缓冲区在内存中的映射。一旦用户进程把图像数据复制到Framebuffer中,显示驱动会一个像素一个像素地扫描整个Framebuffer,并根据其中的值更新屏幕上像素点的颜色。驱动中这个更新屏幕的动作是固定的,它的周期就是我们常说的刷新率Android关于图像渲染显示的架构图如下:结原创 2021-03-29 14:40:15 · 1936 阅读 · 2 评论 -
深入Android系统(十一)AMS-4-广播管理
BroadcastReceiver 管理Broadcast实质上是提供了一种更灵活的使用Intent的方式。无论是启动Activity,还是Service,其实都是通过Intent的发送和过滤来调用应用中的功能,但是Activity、Service、ContentProvider所完成的功能是固定的而对于BroadcastReceiver可以做任意的事情,同时广播的发送和接收方式也更加丰富灵活理解BroadcastReceiverBroadcastReceiver是一种很简单的组件,甚至在Acti原创 2021-03-17 11:42:25 · 551 阅读 · 2 评论 -
深入Android系统(十一)AMS-3-Service和ContentProvider管理
Service 管理官方对Service的描述是:Service是一种可在后台执行长时间运行操作而不提供界面的应用组件。服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。此外,组件可通过绑定到服务与之进行交互,甚至是执行进程间通信IPC。在Service使用上,应用需要在AndroidManifest.xml文件中通过标签<service/>来声明一个Service,标签的属性如下:<service android:description="stri原创 2021-03-17 11:24:08 · 1227 阅读 · 1 评论 -
深入Android系统(十一)AMS-2-Activity生命周期管理
Activity管理Activity是最复杂的一个组件,它负责UI的显示以及处理各种输入事件。Activity提供窗口供应用在其中绘制界面,同时也提供了各种各样的控件方便开发。Activity 官网传送门另外,Android中并没有对外提供启动进程的接口,只是在启动Activity或Service时,由系统根据需要来启动进程。Activity的生命周期关于Activity的生命周期,我们先看下官方图示:Activity的生命周期图中隐含了Activity运行时的三种状态,分别是:激活原创 2021-02-28 20:00:29 · 2115 阅读 · 3 评论 -
深入Android系统(十一)AMS-1-应用组成与服务启动
牛年犇犇犇,刚刚完成AMS一半的学习进度,篇幅确实有点大,不过先更上两篇吧我们不止一次提到Android一直想弱化进程的存在,但是,Android毕竟是建立在Linux系统之上,基础的运行环境还是由进程组成。我们前面已经介绍,所有的Android的应用程序都是由Zygote进程fork而来,因此,构成应用进程的底层基础,像虚拟机、动态库等都是相同的。有了从Zygote中继承来的通用基础环境,Android还在Java层建立一套框架来管理运行的组件来进一步弱化进程的存在感。不过由于每个应用的上层配.原创 2021-02-28 19:57:52 · 840 阅读 · 1 评论 -
深入Android系统(十)PMS-1-服务初始化
导读当PMS笔记大小写到106kb时,就知大事不妙,导读叒叒叒来了不得已,将原本计划一篇结束的文章分为了如下三部分:PMS-1:服务初始化PMS-2:初始化的一些细节PMS-3:应用安装过程前两篇主要梳理了PMS初始化的流程和初始化的一些细节;最后一篇对应用的安装过程进行了简单梳理。有没有注意梳理字眼,关于想要深入全面学习PMS的同学只能非常抱歉,本系列文章也仅仅是起到的主要流程的梳理作用。我们先从整体上掌握,等后面遇到相关需求再来仔细研究吧(这波安慰很及时。。。。)整个模块学原创 2021-01-24 15:02:51 · 1412 阅读 · 2 评论 -
深入Android系统(十)PMS-2-初始化的一些细节
permission文件的处理在PMS的构造方法中初始化了PermissionManagerService,通过PermissionManagerService.create()方法,相关调用如下: public static PermissionManagerInternal create(......) { ...... new PermissionManagerService(context, defaultGrantCallback, externalLoc原创 2021-01-24 14:57:40 · 1415 阅读 · 1 评论 -
深入Android系统(十)PMS-3-应用安装过程
研究应用的安装过程,老样子,我们还是先从使用入手。在Android中,通过发送Intent就可以启动应用的安装过程,比如: Uri uri = Uri.fromFile(new File(apkFilePath)); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(uri,"application/vnd.android.package-archive"); startActivit原创 2021-01-24 14:50:00 · 1601 阅读 · 0 评论 -
深入Android系统(九)Android系统的核心-SystemServer进程
SystemServer是Android系统的核心之一,大部分Android提供的服务都运行在这个进程里。为了防止应用进程对系统造成破坏,Android的应用进程没有权限直接访问设备的底层资源,只能通过SystemServer中的服务代理访问。本篇重点是了解SystemServer的启动过程以及它的Watchdog模块SystemServer的创建过程SystemServer的创建可以分为两部分:在Zygote进程中fork并初始化SystemServer进程的过程执行SystemServer原创 2020-12-27 13:35:55 · 971 阅读 · 0 评论 -
深入Android系统(八)Android的资源管理
Android的优势之一是它几乎能运行在任何尺寸的设备上,为了能让同一个apk在不同设备上正常运行,Android设计了一套资源管理系统来完成目标。Android并不是简单地将UI布局和图片进行扩大和缩小来匹配不同配置的设备,而是通过复杂的资源定义方式来保证每种设备都可以有对应的资源文件,从而让用户体验最佳。资源系统简介Android 应用适应不同设备的方法是尽量为每种类型的设备提供一套资源。理论上虽然可以这样做,但实际上却行不通,我们只能为常见的几种设备类型提供完整的资源,否则应用的占用空间会膨胀到原创 2020-12-19 14:29:01 · 3434 阅读 · 1 评论 -
深入Android系统(七)Zygote进程
Zygote是Android中非常重要的一个进程,它和Init进程、SystemServer进程在Android中有着不可替代的地位。Zygote简介Linux的进程是通过系统调用fork产生的,fork出的子进程除了内核中的一些核心的数据结构和父进程不相同外,其余的内存映像都是和父进程共享的。只有当子进程需要去改写这些共享的内存时,操作系统才会为子进程分配一个新页面。这就是所谓的写时复制(Copy On Write)通常子进程被fork出后,会继续执行系统调用exec。exec将用一个新的可执行文件原创 2020-11-14 12:14:29 · 2129 阅读 · 0 评论 -
深入Android系统(六)第一个用户进程-Init进程
十一假期有点堕落,无限火力有点上瘾,谨戒、谨戒Init进程是Linux 内核启动后创建的第一个用户进程,地位非常重要。Init进程在初始化过程中会启动很多重要的守护进程,因此,了解Init进程的启动过程有助于我们更好的理解Android系统。在介绍Init进程前,我们先简单介绍下Android的启动过程。从系统角度看,Android的启动过程可分为3个大的阶段:bootloader引导装载和启动Linux内核启动Android系统,可分为启动Init进程启动Zygote启动Syst.原创 2020-10-25 15:28:47 · 3358 阅读 · 4 评论 -
深入Android系统(五)Android的同步和消息机制
Android 的消息机制消息驱动是一种进程或线程的运行模式。内部、外部的各种事件都可以放到消息队列中按序处理。这种模式特别适合处理大量的交互事件。Android 应用的UI线程,同样采用了消息驱动模式,所有外部来的按键事件、触屏事件、各种系统Intent、广播等都会转化为内部的消息,然后在主线程中分发处理。消息模型现在的操作系统普遍采用消息驱动模式。Windows操作系统就是经典的消息驱动类型。但是,Android的消息处理机制和Windows的不太相同,我们看下二者的对比图:[外链图片转存原创 2020-09-26 16:35:31 · 1278 阅读 · 0 评论 -
深入Android系统(四)Android 的 JNI
JNI 的作用JNI是Java Native Interface的缩写。JNI不是Android专有的东西,它是从Java继承而来的,但是在Android中,JNI的作用和重要性大大增强了。Android作为一种嵌入式操作系统,有大量驱动、硬件相关的功能必须在native层实现,另外一些注重性能、功耗的功能使用C/C++来实现也优于用Java来实现。因此,在Android的开发中,无论是应用级的开发,还是系统级的开发都离不开JNI。Android在编译、应用打包和安装、程序装载等各方面都对JNI进行原创 2020-09-13 16:14:36 · 540 阅读 · 0 评论 -
深入Android系统(三)Binder-1-导读与简介
导读(总结)导读叕叕叕叕来了。本来计划着8月底看完binder,而且是用一篇文章来记录完所学的知识,可是:读着读着,感觉缺少一个能串联起整个binder的主线,所以决定增加导读写着写着,突然发现一篇装不下,所以拆成了三篇导读和binder简介为一篇binder的使用为一篇binder原理为一大篇(85KB…)简单的开始我们先简单了解下binder架构涉及的几个概念:客户进程:发起远程方法调用的进程服务进程:真正服务所运行的进程binder驱动:binder通信的核心,原创 2020-09-05 14:01:18 · 465 阅读 · 0 评论 -
深入Android系统(三)Binder-2-使用
如何使用 Binder就开发语言而言,Binder服务可以用Java实现,也可以用C++实现,通常,我们在Java代码中调用Java语言实现的服务,在C++代码中调用C++编写的服务。但是从原理上讲,Binder并没有这种语言平台的限制,混合调用也是可以的。应用可以在任意的进程和线程中使用Binder服务的功能,非常方便、灵活。也不用关心同步、死锁等问题使用Binder服务C++层和Java层使用Binder服务的方式基本一样,包括函数的接口类型都相同,这里以C++为例:使用Binder服务前原创 2020-09-05 13:56:01 · 723 阅读 · 0 评论 -
深入Android系统(三)Binder-3-原理
Binder的实现原理涉及到原理源码肯定是少不了的,9.0 binder 相关的源码分为三部分:Java:frameworks/base/core/java/android/os/Binder.javanative:frameworks/native/libs/binder/driver:common/drivers/android/binder.c还有一点需要明确的是:用户进程:针对内核空间或者binder驱动来说的,这里指的是向binder驱动发送消息的进程客户进程:针对binder原创 2020-09-05 13:58:23 · 665 阅读 · 0 评论 -
深入Android系统(二)Bionic库
Bionic库是Android的基础库之一,也是连接Android和Linux的桥梁。Bionic库中包含了很多基本系统功能接口,这些功能大部分来自 Linux,但是和标准的 Linux 之间有很多细微差别。同时Bionic库中增加了一些新的模块(像log、linker),服务于Android的上层代码。导读为甚有导读呢,因为Bionic库这部分学起来太枯燥了,在实际开发过程中几乎没主动使用过,不过并不代表它不存在哈,这哥们无处不在。。。通过Bionic库的学习呢,至少可以:了解Andro.原创 2020-08-05 22:26:21 · 3464 阅读 · 2 评论 -
深入Android系统(一)Build系统
深入Android系统这本书是以Android5.0为基础讲解,但本人使用的是Android9.0的源码,所以和原书内容会有些出入。对于Android的构建系统,在Android7.0之后Google就已经使用Soong构建系统,旨在取代 Make。它利用 Kati GNU Make 克隆工具和 Ninja 构建系统组件来加速 Android 的构建。这里是官方构建传送门读书是一个引导学习的过程,读此书的目的是全面了解Android系统,当有一个全面了解后再来看新版特性吧。5.0 确实老了点。哈.原创 2020-07-19 19:28:23 · 3659 阅读 · 0 评论