Framework篇
Tony-老师
这个作者很懒,什么都没留下…
展开
-
Framework篇 - Android 系统介绍和架构一览
今天开始写 Android Framework 相关的文章,平时我们开发用的都是 Android 封装好的 API,理解里面的原理对于我们平时的开发,面试都有很大的帮助。目录:Android 系统简述 AOSP 的下载和编译 Android 的四层架构 Android 系统的启动架构1.Android 系统简述1.1 简述Android 是一...原创 2019-02-27 20:12:32 · 2880 阅读 · 0 评论 -
Framework篇 - 如何使用 Binder
今天来写两个 Binder 的例子,一个 native 层,一个 Framework层。目录:native 层使用Binder Framework 层使用Binder1. native 层使用Binder1.1 源码目录ClientDemo.cpp:客户端程序ServerDemo.cpp:服务端程序IMyService.h:自定义的 My...原创 2019-03-04 17:04:51 · 564 阅读 · 2 评论 -
Framework篇 - Dalvik VM、ART VM 和 JVM 的比较
今天来对比下与 Android 有关的3个虚拟机:JVM、Dalvik、ART。目录:JVM 简述 Dalvik 简述 ART 简述1. JVM 简述JVM 是Java Virtual Machine (Java虚拟机)的缩写,JVM 是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java 语言...原创 2019-03-14 13:10:31 · 652 阅读 · 0 评论 -
Framework篇 - AIDL 的使用详解
上一篇文章,写了 Binder 在 native 和 Framework 如何使用,今天来看看 Android 提供的跨进程通信语言 - AIDL。目录:什么是 AIDL AIDL 语法 使用 AIDL 步骤 AIDL 原理1. 什么是 AIDLAIDL全称是 Android Interface Definition Language,也就是 Andr...原创 2019-03-04 19:05:15 · 1508 阅读 · 0 评论 -
Framework篇 - Handler framework 源码分析
前几篇都是写 Binder 系列的文章,Binder 用于跨进程通信。而 Android 中,同一进程的不同线程如何通信呢,就要用到今天的主角 Handler 了。目录:Handler 概念 为什么只能通过 Handler 更新 UI 子线程使用 Handler Handler framework 源码分析1.Handler 概念Handler 主要...原创 2019-03-04 23:35:06 · 312 阅读 · 0 评论 -
Framework篇 - 杀进程和 forceStop 分析
前面介绍了进程创建的过程,今天来说一说 Android 中的杀进程和 forceStop,forceStop 对应中文就是"强行停止"。杀进程 forceStop1. 杀进程1.1 Process.killProcess()杀进程从Process.killProcess() 开始,那么就以它作为入口。/base/core/java/android/os...原创 2019-03-07 21:03:34 · 5662 阅读 · 3 评论 -
Framework篇 - startActivity 启动过程
本文源代码基于 Android 7.0。今天来分析一下 startActivity 的启动过程。1. Activity/base/core/java/android/app/Activity.java @Override public void startActivity(Intent intent) { this.start...原创 2019-03-11 17:27:02 · 681 阅读 · 0 评论 -
Framework篇 - startService 启动过程
本文源代码基于 Android 7.0。这篇文章来分析一下 startService() 的启动过程,相对于 startActivity() 要简单的多。目录:发起端进程 system server 进程 目标进程 总结1.Context/base/core/java/android/app/ContextImpl.java启动服务调用的...原创 2019-03-11 18:58:22 · 852 阅读 · 1 评论 -
Framework篇 - Application 的创建过程分析
本文源代码基于 Android 7.0。system 进程和 app 进程都运行着一个或多个 app,每个 app 都会有一个对应的 Application 对象 (该对象和LoadedApk 一一对应)。今天就来分析一下 Application 的创建过程,其实前面的文章已经有大体讲过,这边单独抽出一章来系统讲解下。目录:system_server 进程创建 Appl...原创 2019-03-11 22:31:26 · 536 阅读 · 0 评论 -
Framework篇 - 一文搞懂 Activity、View、Window、ViewRootImpl
本文源代码基于 Android 7.0。前面的文章讲解了 startActivity 的过程:Framework篇 - startActivity 启动过程,那么 Activity、Window、View 和 ViewRootImpl 它们之间到底是一个怎么样的关系呢?目录:Window 的创建过程 关系图 getWindowManager().addView(...原创 2019-03-12 15:34:57 · 906 阅读 · 0 评论 -
Framework篇 - 从 WindowManageService 的角度来分析 Activity 的窗口
本文源代码基于 Android 7.0。/base/services/core/java/com/android/server/am/ActivityStack.java /base/services/core/java/com/android/server/wm/WindowManagerService.java /base/services/core/java/com/andro...原创 2019-03-12 18:26:21 · 421 阅读 · 0 评论 -
Framework篇 - 系统服务的注册方式
本文源代码基于 Android 7.0。有两种不同的方式来注册系统服务:ServiceManager.addService() SystemServiceManager.startService()这两种方式最终都是向 service manager 进程注册 Binder 服务,但是在功能上有区别,下面从代码角度来分析。1.ServiceManager.a...原创 2019-03-12 20:08:14 · 622 阅读 · 0 评论 -
Framework篇 - InputManagerSerice 分析整理
本文源代码基于 Android 7.0。/base/services/core/java/com/android/server/input/InputManagerService.java (IMS) /base/services/core/java/com/android/server/wm/WindowManagerService.java (WMS) /base/servic...原创 2019-03-13 15:06:04 · 378 阅读 · 0 评论 -
Framework篇 - PackageManagerService 启动分析
本文源代码基于 Android 7.0。/base/services/java/com/android/server/SystemServer.java /base/services/core/java/com/android/server/pm/PackageManagerService.java /base/services/core/java/com/android/serv...原创 2019-03-13 18:02:50 · 883 阅读 · 0 评论 -
Framework篇 - Hook 技术实战
目录:Hook 介绍 Hook 原理 Hook demo Hook 框架1.Hook 介绍Hook 翻译过来就是"钩子"的意思,那在什么时候使用 Hook呢?在 Android 操作系统中系统维护着一套自己的事件分发机制。应用程序,包括应用触发事件和后台逻辑处理,也是根据事件流程一步步地向下执行。而 Hook的意思,就是在事件传送到终点前截获并监控事件...原创 2019-03-06 19:14:58 · 1156 阅读 · 1 评论 -
Framework篇 - 彻底理解 Binder 通信架构
本文源代码基于 Android 7.0。目录:Binder 分层架构 startService 分析 Binder 通信流程分析 Binder1.Binder 分层架构Java 应用层:对于上层应用通过调用 AMP.startService,完全可以不用关心底层,经过层层调用,最终必然会调用到AMS.startService。Java I...原创 2019-03-03 22:13:42 · 510 阅读 · 0 评论 -
Framework篇 - Android 为何选择 Binder 以及 Binder 的实现原理
无论是什么 OS,各个组件都运行在不同的进程/线程内,这就会涉及到它们之间的通信问题。Linux 现在已有的 IPC 通信方式有管道、信号量、信号、消息队列、共享内存、Socket 套接字,而 Android 在 Linux 的基础上还有自己独特的 Binder IPC 机制。Android OS 中的 Zygote 进程的 IPC 采用的是 Socket 机制,在上层 system se...原创 2019-02-28 17:03:18 · 507 阅读 · 0 评论 -
Framework篇 - init.rc 与 ServiceManager 的启动和获取
本文源代码基于 Android 7.0。目录:init.rc 和 init.c ServiceManager 的启动流程 获取 ServiceManager1.init.rc 和 init.c1.1 init.rcLinux 的重要特征之一就是一切都是以文件的形式存在的,例如,一个设备通常与一个或多个设备文件对应。这些与内核空间交互的文件都在...原创 2019-02-28 19:07:12 · 1670 阅读 · 1 评论 -
Framework篇 - ServiceManager 注册和获取服务
本文源代码基于 Android 7.0。本文来讲解下 ServiceManager 是如何注册服务和获取服务的。目录:Binder 的架构图 Java 层的 ServiceManager 注册和获取服务 native 层的 ServiceManager 注册和获取服务1.Binder 的架构图native 层中,binder 是 C/S 架构,...原创 2019-03-01 16:41:37 · 1663 阅读 · 0 评论 -
Framework篇 - Binder 线程池
本文源代码基于 Android 7.0。本文主要分析Binder 线程池以及 Binder线程启动过程。目录:概述 分析 总结1.概述Android 系统启动完成后,ActivityManager,PackageManager 等各大服务都运行在 systemserver 进程, app 应用需要使用系统服务都是通过 binder 来完成进...原创 2019-03-01 19:23:09 · 5323 阅读 · 7 评论 -
Framework篇 - 为什么主线程不会因为 Looper.loop() 里的死循环卡死
本文源代码基于 Android 7.0。Handler 的原理分析:https://blog.csdn.net/u014294681/article/details/88140258对于线程既然是一段可执行的代码,当可执行代码执行完成后,线程生命周期便该终止了,线程退出。而对于主线程,我们是绝不希望会被运行一段时间,自己就退出,那么如何保证能一直存活呢?简单做法就是可执行代码是...原创 2019-03-04 23:58:46 · 393 阅读 · 0 评论 -
Framework篇 - Android 开机动画分析
本文源代码基于 Android 7.0。Framework 系列的第一篇就介绍了 Android 系统的启动架构,其中有介绍到,在 native 层,Init进程会启动 ServiceManager (binder服务管家)、bootanimation (开机动画) 等重要服务。ServiceManager 已经在之前写过了,今天来写写 Android 的 bootanimation...原创 2019-03-05 15:11:04 · 957 阅读 · 0 评论 -
Framework篇 - Init 进程分析
本文将分析 pid = 1 的 Init 进程。Init是 Linux 系统中用户空间的第一个进程,进程号为1。Kernel 启动后,在用户空间,启动 Init进程,并调用 Init中的 main() 方法执行Init进程的职责。Init 进程从功能上来说,分成下面四个部分:分析和运行所有的 init.rc 文件。 生成设备驱动节点 (通过 rc 文件创建)。 处理子进程的终...原创 2019-03-05 16:38:52 · 426 阅读 · 0 评论 -
Framework篇 - zygote 进程分析
本文源代码基于 Android 7.0。Init 进程孵化出 Zygote 进程,Zygote 进程是 Android 系统的第一个 Java 进程 (即虚拟机进程),Zygote 是所有 Java 进程的父进程。目录:概述 Zygote 的启动过程 Java 层分析 总结1. 概述Zygote 是由 Init 进程通过解析 init.zygot...原创 2019-03-05 17:46:08 · 615 阅读 · 0 评论 -
Framework篇 - SystemServer 进程详解
本文源代码基于 Android 7.0。SystemServer 由 Zygote fork 生成,进程名为 system_server,该进程承载着 Framework 的核心服务。关于 Zygote 的启动流程,到 SystemServer 的启动入口,可以参考这篇文章:Framework篇 - zygote 进程分析目录:SystemServer 进程创建流程 S...原创 2019-03-05 19:08:02 · 923 阅读 · 0 评论 -
Framework篇 - 四大组件与进程启动的关系
本文源代码基于 Android 7.0。一个进程里可以运行多个 app,一个 app 也可以运行在多个进程中,通过配置 Android:process 属性来决定。进程对 Android 来说非常重要,承载着 Android 的四大组件,影响着系统的正常运转。目录:四大组件与进程 进程启动的全过程 启动过程图1.四大组件与进程Activity, Serv...原创 2019-03-08 18:33:34 · 778 阅读 · 0 评论 -
Framework篇 - ANR 原理分析
本文源代码基于 Android 7.0。这篇文章来分析一下 Android 中 ANR 的原理。目录:ANR 简介 Service ANR 分析 如何避免 ANR1.ANR 简介ANR (Application Not responding),是指应用程序未响应,Android 系统对于一些事件需要在一定的时间范围内完成,如果超过预定时间能未能得到有...原创 2019-03-06 15:14:40 · 564 阅读 · 0 评论 -
Framework篇 - framework 层的 crash 处理流程
本文源代码基于 Android 7.0。App crash (全称 Application crash),对于 crash 可分为 native crash 和 framework crash (包含 app crash 在内),对于 crash 相信很多 app 开发者都会遇到,那么上层什么时候会出现 crash 呢,系统又是如何处理 crash 的呢?例如,在 app 中大家经...原创 2019-03-06 16:35:05 · 1381 阅读 · 2 评论 -
Framework篇 - 进程的生命周期与优先级
目录:进程的生命周期 Lowmemorykiller 进程的优先级1.进程的生命周期Android 系统将尽量长时间地保持应用进程,但为了新建进程或运行更重要的进程,最终需要清除旧进程来回收内存。为了确定保留或终止哪些进程,系统会根据进程中正在运行的组件以及这些组件的状态,将每个进程放入"重要性层次结构"中。必要时,系统会首先消除重要性最低的进程,然后是清除...原创 2019-03-08 19:16:35 · 625 阅读 · 0 评论 -
Framework篇 - APK 安装流程简介
本文源代码基于 Android 7.0。在 Android 系统下,我们一般会使用 "adb install -r" 命令来安装应用,此时应用会被安装到 /data/app/ 下。这篇文章,我们就简要分析 PackageManagerService 安装 APK 的中间处理过程。目录:安装流程图 adb 方式安装 APK PackageManager 安装 APK...原创 2019-03-13 20:01:36 · 1599 阅读 · 0 评论