安卓源码解析
文章平均质量分 88
进击的代码家
这个作者很懒,什么都没留下…
展开
-
重新复习Android View事件分发
一个Activity包含了一个Window对象,这个对象是由PhoneWindow来实现的。PhoneWindow将DecorView作为整个应用窗口的根View,而这个DecorView又将屏幕划分为两个区域:一个是TitleView,另一个是ContentView,而我们平时所写的就是展示在ContentView中触摸事件的类型触摸事件对应的是MotionEvent类,事件的类型主要有如下三种:ACTION_DOWNACTION_MOVE(移动的距离超过一定的阈值会被判定为ACTION_MOVE原创 2021-02-17 11:12:43 · 250 阅读 · 0 评论 -
重新复习Android View的绘制流程
PhoneWindow是Android系统中最基本的窗口系统,每个Activity会创建一个。同时,PhoneWindow也是Activity和View系统交互的接口。DecorView本质上是一个FrameLayout,是Activity中所有View的祖先。开始:DecorView被加载到Window中1.Activity里的PhoneWindow创建是在Activity的attach方法中,这个方法是Activity在ActivityThread被创建之后调用Activity.javaAct原创 2021-02-16 21:47:21 · 230 阅读 · 0 评论 -
Instant run动态加载机制
关于动态加载,实际上Instant run提供了两种动态加载的机制:1.修改java代码需要重启应用加载补丁dex,而在Application初始化时替换了Application,新建了一个自定义的ClassLoader去加载所有的dex文件。我们称为重启更新机制2.修改代码不需要重启,新建一个ClassLoader去加载修改部分。我们称为热更新机制Application入口在编译时Instant run用到了Transform API修改字节码文件。其中AndroidManifest.xml文件也原创 2021-02-14 17:36:49 · 679 阅读 · 0 评论 -
你真懂的ViewStub,include,merge么
1.includeinclude就是为了解决重复定义相同布局的问题<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:id="@+id/my_title_parent_id" andro原创 2021-02-10 12:36:30 · 837 阅读 · 0 评论 -
Android Framework分析(3)——Zygote进程源码分析
Zygote进程源码分析由app_process运行ZygoteInit classzygote由java编写而成,不能直接由init进程启动运行。若想执行zygote类,必须先创建虚拟机,然后在虚拟机上运行ZygoteInit类。执行这一任务的就是app_process程序。下面我们开始分析zygote进程的启动流程:/system/core/rootdir/init.rc可以看到init.rc中有如下导包import /init.$(ro.zygote).rc如果是64位系统,$(ro原创 2020-07-10 11:32:35 · 1016 阅读 · 3 评论 -
深入理解Android Framework(1)-init
回收僵尸进程,在Linux内核中,如父进程不等待子进程的结束直接退出,会导致子进程在结束后变成僵尸进程,占用系统资源。在Android系统中,所有的进程共享系统设置值,为此提供一个名称为属性的保存空间。每个进程在处理其他进程发送的signal信号时都需要先注册,当进程的运行状态改变或终止时会产生某种signal信号,init进程是所有用户空间进程的父进程,当其子进程终止时产生SIGCHLD信号,init进程调用信号安装函数sigaction(),传递参数给sigaction结构体,便完成信号处理的过程。原创 2020-07-06 21:31:41 · 1101 阅读 · 0 评论 -
深入学习Android framework(2)——Handler Native层
基于android28源码,MessageQueue类里面涉及到多个native方法,除了MessageQueue的native方法,native层本身也有一套完整的消息机制,用于处理native的消息,如下图Native层的消息机制。Java层可以向MessageQueue消息队列中添加消息,Native层也可以向MessageQueue消息队列中添加消息MessageQueue初始化过程的调用链如下:在MessageQueue中的native方法如下: private native st原创 2020-06-30 16:57:28 · 4487 阅读 · 0 评论 -
Android Gradle源码分析
一.如何调试Android Gralde源码最简单的方式如下:1.配置 gradle.properties比较方便的做法是配置全局的 gradle.properties,这样对所有 Gradle 工具都适用,配置文件位于 ~/.gradle/gradle.properties,在 gradle.properties 文件中加上 org.gradle.jvmargs 属性:org.gradle.jvmargs=-XX:MaxPermSize=4g -XX:+HeapDumpOnOutOfMemoryE原创 2020-06-04 11:24:52 · 2677 阅读 · 4 评论 -
Android源码分析之理解Window和WindowManager
Window和WindowManager概述Window是一个抽象类,它的具体实现是PhoneWindow,创建一个Window通过WindowManager 就可以完成。WindowManager是外界访问Window的入口,它的具体实现在WindowManagerService中,WindowManager和WindowManagerService的交互是一个IPC的过程。Android中所有的原创 2017-08-18 00:51:03 · 11966 阅读 · 0 评论 -
深入解析Glide源码
Glide 是 Google的开源项目, Glide具有获取、解码和展示视频剧照、图片、动画等功能,它还有灵活的API,这些API使开发者能够将Glide应用在几乎任何网络协议栈里。创建Glide的主要目的有两个,一个是实现平滑的图片列表滚动效果,另一个是支持远程图片的获取、大小调整和展示。本篇博客,我们一起深入分析Glide的源码。总体设计with方法首先我们来看一下glide的一般使用方法Gli原创 2017-06-23 09:30:48 · 9892 阅读 · 0 评论 -
深入解析Android中View的工作原理
Android中的任何一个布局、任何一个控件其实都是直接或间接继承自View实现的,当然也包括我们在平时开发中所写的各种炫酷的自定义控件了,所以学习View的工作原理对于我们来说显得格外重要,本篇博客,我们将一起深入学习Android中View的工作原理。ViewRoot和DecorView1.ViewRoot对应于ViewRootImpl类,是连接WindowManager和DecorView的纽原创 2017-05-08 22:54:42 · 11092 阅读 · 2 评论 -
Android Framework学习(十二)之获取ServiceManager
概述获取Service Manager是通过defaultServiceManager()方法来完成,当进程注册服务(addService)或 获取服务(getService)的过程之前,都需要先调用defaultServiceManager()方法来获取gDefaultServiceManager对象。对于gDefaultServiceManager对象,如果存在则直接返回;如果不存在则创建该对象原创 2017-05-15 22:05:36 · 4484 阅读 · 0 评论 -
Android Framework学习(十一)之从ServiceManager获取Native层服务
上一篇博客,我们学习了服务是如何向ServiceManager中进行注册的,本篇博客,我们将学习如何从ServiceManager中获取服务,和上一篇一样,同样以MediaPlayerService为例子。 蓝色: 代表获取MediaPlayerService服务相关的类; 绿色: 代表Binder架构中与Binder驱动通信过程中的最为核心的两个类; 紫色: 代表注册服务和获取服务的公共接口原创 2017-05-14 22:16:37 · 4514 阅读 · 0 评论 -
深入解析Android中Handler消息机制
Android提供了Handler 和 Looper 来满足线程间的通信。Handler先进先出原则。Looper类用来管理特定线程内对象之间的消息交换(MessageExchange)。Handler消息机制可以说是Android系统中最重要部分之一,所以,本篇博客我们就来深入解析Android中Handler消息机制。Handler的简单使用为什么系统不允许子线程更新UI因为的UI控件不是线程安原创 2017-02-13 01:08:26 · 5995 阅读 · 6 评论 -
Android Framework学习(一)之init进程解析
init进程是Android系统中用户空间的第一个进程,它被赋予了很多极其重要的工作职责,init进程相关源码位于system/core/init,本篇博客我们就一起来学习init进程(基于Android 7.0)。init入口函数分析init的入口函数为main,位于system/core/init/init.cppint main(int argc, char** argv) { if原创 2017-04-30 16:38:42 · 6001 阅读 · 1 评论 -
Android Framework学习(二)之Zygote进程启动解析
上篇博客,我们学习了init进程的相关知识,本篇博客我们一次来学习zygote进程的相关知识。Zygote简介在Android系统中,JavaVM(Java虚拟机)、应用程序进程以及运行系统的关键服务的SystemServer进程都是由Zygote进程来创建的,我们也将它称为孵化器。它通过fock(复制进程)的形式来创建应用程序进程和SystemServer进程,由于Zygote进程在启动时会创建J原创 2017-04-30 21:32:56 · 1821 阅读 · 0 评论 -
Android Framework学习(三)之SyetemServer进程启动解析
从上篇博客中,我们知道了Zygote进程启动了SyetemServer进程,本篇博客我们就一起来学习SyetemServer进程。SystemServer的作用整个系统的android framework进程启动流程如下:init进程 –> Zygote进程 –> SystemServer进程 –>各种应用进程SystemServer进程主要的作用是启动各种系统服务,比如ActivityManage原创 2017-05-01 10:58:30 · 2412 阅读 · 0 评论 -
Android Framework学习(四)之Launcher启动流程解析
在之前的博客中,我们学习了init进程、Zygote进程和SyetemServer进程的启动过程,我们知道SystemServer进程主要用于启动系统的各种服务,二者其中就包含了负责启动Launcher的服务,LauncherAppService,本篇博客我们将一起学习Launcher相关的知识。Launcher概述Launcher程序就是我们平时看到的桌面程序,它其实也是一个Android应用程序原创 2017-05-01 13:26:59 · 4657 阅读 · 1 评论 -
Android Framework学习(六)之RefBase,SP,WP
Android中通过引用计数来实现智能指针,并且实现有强指针与弱指针。由对象本身来提供引用计数器,但是对象不会去维护引用计数器的值,而是由智能指针来管理。要达到所有对象都可用引用计数器实现智能指针管理的目标,可以定义一个公共类,提供引用计数的方法,所有对象都去继承这个公共类,这样就可以实现所有对象都可以用引用计数来管理的目标,在Android中,这个公共类就是RefBase,同时还有一个简单版本Li原创 2017-05-01 23:01:43 · 2889 阅读 · 0 评论 -
Android Framework学习(七)之Thread类以及常用同步类
Thread类是Android为线程操作而做的一个封装。代码在Thread.cpp中,其中还封装了一些与线程同步相关的类,,本篇博客,我们一起学习Thread类以及常用同步类。Thread类Thread类的构造函数中的有一个canCallJava Thread.cppstatus_t Thread::run(const char* name, int32_tpriority, size_t sta原创 2017-05-04 21:36:27 · 2562 阅读 · 0 评论 -
Android Framework学习(八)之Handler消息机制(Native层)解析
在深入解析Android中Handler消息机制一文中,我们学习了Handler消息机制的java层代码,这次我们来学习Handler消息机制的native层代码。在Java层的消息处理机制中,MessageQueue类里面涉及到多个native方法,除了MessageQueue的native方法,native层本身也有一套完整的消息机制,用于处理native的消息。在整个消息机制中,而Messag原创 2017-05-06 18:36:20 · 3193 阅读 · 0 评论 -
Android Framework学习(九)之Binder概述
Android系统中,每个应用程序是由Android的Activity,Service,Broadcast,ContentProvider这四大组件的中一个或多个组合而成,这四大组件所涉及的多进程间的通信底层都是依赖于Binder IPC机制。不仅于此,整个Android系统架构中,大量采用了Binder机制作为IPC(进程间通信)方案,当然也存在部分其他的IPC方式,比如Zygote通信便是采用s原创 2017-05-06 19:12:35 · 1534 阅读 · 0 评论 -
Android Framework学习(十)之向ServiceManager注册Native层服务
本篇博客以MediaServer为切入点,对向ServiceManager注册Native层服务进行分析。media入口函数是main_mediaserver.cpp中的main()方法int main(int argc __unused, char** argv){ ... InitializeIcuOrDie(); //获得ProcessState实例对象 sp原创 2017-05-08 20:46:12 · 2470 阅读 · 0 评论 -
PackageManagerService启动流程源码解析
概述PackageManagerService,是Android系统中核心服务之一,管理着所有跟package相关的工作,常见的比如安装、卸载应用。 PKMS服务也是通过binder进行通信,IPackageManager.aidl由工具转换后自动生成binder的服务端IPackageManager.Stub和客户端IPackageManager.Stub.Proxy,具体关系如下: Binde原创 2017-02-05 21:29:22 · 5439 阅读 · 4 评论