
Android源码解析
文章平均质量分 92
helson赵子健
这个作者很懒,什么都没留下…
展开
-
深入掌握Binder原理(下)
前言在前一篇文章《深入掌握Binder原理(上)》中,我们已经了解了Binder的架构以及Binder的组成部分,并且深入的了解了Binder驱动程序以及ServiceManager的原理,在这篇文章中,会对Binder剩下两部分Client和Server进行讲解,这里建议没有阅读上一篇文章的先读完上一篇文章,然后再来看这一篇,只有这两篇文章连起来,才能对Binder的体系有一个完整和深入的了解。Binder实现原理为了能更具体的理解Binder中Client和Server这两个组成部分,这里我以我们原创 2020-11-29 00:20:44 · 631 阅读 · 0 评论 -
深入掌握Binder原理(上)
前言为什么要了解Binder的原理呢,会用不就可以了吗?深入了解Binder不仅仅是为了了解Binder的通信方式,而是从Binder设计中去学习一种优秀的架构思想和问题的解决思路。当我们遇到复杂的通信场景时,或者在一个新的平台上,需要一种新的通信方式提高安全或者效率性能等问题时,我们可以从Binder的设计中借鉴灵感。架构师的成长之路,就是不断的从优秀的设计中学习经验和解决方案。所以,作为一个有追求的程序员,开始对Binder的深入了解吧。网上介绍Binder的文章非常多,我为什么还要再写呢?主要是因为原创 2020-11-08 17:17:05 · 855 阅读 · 1 评论 -
掌握Android图像显示原理(下)
前言前面两篇文章介绍了图像生产者和图像消费者,终于到了最后一篇——图像缓冲区,这三者一起构成了一个完整的Android图像显示系统。Android中的图像生产者OpenGL,Skia,Vulkan将绘制的数据存放在图像缓冲区中,Android中的图像消费SurfaceFlinger从图像缓冲区将数据取出,进行加工及合成。那么图像缓冲区是什么呢?它是如何创建出来的呢?又要如何使用它呢?它的存储原理是什么呢?读完这篇文章,你就能回答这些问题了。图像缓冲区在讲解图像的生产者时,多次提到了Surface,我们原创 2020-10-03 17:48:08 · 2818 阅读 · 2 评论 -
掌握Android图像显示原理(中)
前言在上一篇文章《Android图形渲染原理(上)》中,详细的讲解了图像消费者,我们已经了解了Android中的图像元数据是如何被SurfaceFlinger,HWComposer或者OpenGL ES消费的,那么,图像元数据又是怎么生成的呢?这一篇文章就来详细介绍Android中的图像生产者——SKIA,OPenGL ES,Vulkan,他们是Android中最重要的三支画笔。图像生产者OpenGL ES什么是OpenGL呢?OpenGL是一套图像编程接口,对于开发者来说,其实就是一套C语言编写原创 2020-09-19 02:09:12 · 4368 阅读 · 0 评论 -
掌握Android图像显示原理(上)
我们所知道的Activity或者是应用App界面的显示,只属于Android图形显示的一部分。同样可以在Android系统上展示图像的WebView,Flutter,或者是通过Unity开发的3D游戏,他们的界面又是如何被绘制和显现出来的呢?他们和我们所熟悉的Acitvity的界面显示又有什么异同点呢?我们可以不借助Activity的setView或者InflateView机制来实现在屏幕上显示出我们想要的界面吗?Android系统显示界面的方式又和IOS,或者Windows等系统有什么区别呢?原创 2020-09-06 18:52:51 · 7954 阅读 · 6 评论 -
深入理解Android进程间通信机制
通信是Android开发必不可少的一部分,不管是我们做应用App开发,还是Android系统,都使用了大量的通信。通信又分为进程间通信和进程内通信,在这篇文章,我主要深入讲解Android系统所涉及到的所有进程间通信方式。Android系统中有大量IPC(进程间通信)的场景,比如我们想要创建一个新的进程,需要通过Socket这种IPC方式去让Zygote Fork新进程;如果我们要杀掉一个进程,需要通过信号这种IPC方式去将SIGNAL_KILL信号传递到系统内核;如果我们想要唤醒主线程处于休眠中的Lo原创 2020-08-29 09:34:31 · 2287 阅读 · 0 评论 -
掌握Java和Android虚拟机
我们知道的虚拟机有很多,运行Java的JVM虚拟机,运行Android程序的Davlik和Art虚拟机,运行C#的CLR虚拟机,那么什么是虚拟机呢,虚拟机的作用又是什么呢?运行JavaScript的v8引擎或者运行Python的引擎是否也是虚拟机呢?带着这几个问题,我们开始对虚拟机的学习。虽然现在很多人都认为运行JavaScript的V8或运行Python的VirtualEnv,都不是虚拟机,而是解释器,主要原因是因为V8或者VirtualEnv不仅仅能执行字节码文件,还能将源文件编译成字节码文件,而传原创 2020-08-15 23:24:19 · 2087 阅读 · 0 评论 -
Activity启动详解
我们先从普通的应用内启动activity开始看起,也就是startActivity()这个方法,我们会发现这个函数最终会执行startActivityForResult()方法,传递的参数为intent和-1,所以我们直接看看这个函数public void startActivityForResult(Intent intent, int requestCode, @Nullable Bu...原创 2018-06-06 12:35:22 · 4888 阅读 · 3 评论 -
ActivityManagerService启动解析
我们知道,在zygote进行初始化时,会调用startSystemServer方法来初始化各种servcie,其中包括ActivityMangerService,现在我们就来看看ActivityMangerService是如何初始化的。我们从AMS被初始化的地方开起,也就是 SystemServer这个类它的源码位于frameworks/base/services/java/com/andro...原创 2018-04-23 13:30:20 · 2232 阅读 · 0 评论 -
Android底层启动解析
过去的这一年多里,做过VR,AR,现在又回到了Android客户端,开始做AI相关的应用,Android方面的知识也开始重新捡了起来,所以在这儿撸一遍Android的底层源码,巩固加强一下在自己Android方面的技能。在撸Android的源码之前,我们先要有两件事要准备,第一件事是有一份Android的源码,我一般是通过线上(http://androidxref.com/)查看源码的,这个网...原创 2018-03-23 19:27:39 · 2957 阅读 · 3 评论