【Framework源码解析】
没有鱼了
https://developer.android.google.cn/
https://www.androiddevtools.cn/
展开
-
带你从源码一步步分析Android View面试中的事件分发流程
在Android中,事件分发机制是一块很重要的知识点,掌握这个机制能帮你在平时的开发中解决掉很多的View事件冲突问题,这个问题也是面试中问的比较多的一个问题了,今天就来一探究竟原创 2019-12-24 21:14:11 · 1358 阅读 · 1 评论 -
从源码解析-Android系统启动流程概述 init进程zygote进程SystemServer进程启动流程
Android系统启动过程往细了说可以分为5步: Loader –》Kernel –》Native –》Framework –》ApplicationLoaderBoot ROM: 当手机处于关机状态时,长按Power键开机,引导芯片开始从固化在ROM里的预设出代码开始执行,然后加载引导程序到RAMBoot Loader:这是启动Android系统之前的引导程序,主要是检查RAM...原创 2018-09-16 22:44:25 · 5392 阅读 · 0 评论 -
从源码解析-Android中Zygote进程是如何fork一个APP进程的
zygote进程fork子进程前言前言每个APP可能运行在一个进程,也可能在多个进程,这些进程拥有自己独立的资源;然而这些进程都是由Zygote进程fork出来的,再往前一步其实是system server进程使用LocalSocket去通知zygote进程,然后zygote去fork一个子进程,也就是APP进程(更往前一步就是APP进程使用Binder机制去通知system server进程...原创 2018-09-18 19:34:44 · 8135 阅读 · 9 评论 -
从源码解析-结合Activity加载流程深入理解ActivityThrad的工作逻辑
我们知道在Sun的Java体系中和C语言中的类或者程序入口点都是main方法,那我们的Android程序入口是不是也是某个类的main方法呢?有一点很奇怪的是,我们平时开发中好像没接触过main方法,基本上都是与四大组件(还有一个Fragment)和Application打交道;要想弄清楚这是怎么回事,就必须要了解下当你点击手机桌面上某个APP的icon后,它是怎么从无到有运行在你的眼前的原创 2018-09-26 14:50:04 · 1451 阅读 · 0 评论 -
Android源码解析之Bitmap占用内存正确的计算公式 你知道吗
做移动端应用开发的朋友或多或少为Bitmap头疼过,茶不思饭不想就为了想出一个优秀加载Bitmap的方法,为什么会有这样的情况呢?毫无疑问,太尼玛吃内存了这玩意,Android手机本来内存就这么点,而且还是多个应用共享,稍微不注意给你送个惊喜,来个OutofMemoryError,不要太酸爽哦,所以作为移动软件开发者,解决好Bitmap是一个必修课,今天就来聊聊原创 2018-11-18 17:21:25 · 2342 阅读 · 2 评论 -
从源码解析-Android数据存储之正确使用SharedPreferences
SharedPreferences简言Shared Preferences使用步骤APIEditor类APISharedPreferences类API获取SharedPreferences源码解析Context.getSharedPreferencesContextImpl.getSharedPreferencesPathContextImpl.getSharedPreferences 重载方法S...原创 2018-10-29 18:48:44 · 1271 阅读 · 0 评论 -
源码解析-深刻理解Hash HashTable HashMap原理及数据hash碰撞问题
Map接口应该是在开发中每天都可能会接触的了,它给我们快速存取数据提供了一种解决途径,尤其是它的一个子类HashMap;为什么这么说呢?我们知道除了Map这种数据结构存取数据外,我们可能还会用到其它的数据结构来做这件事,比如数组和链表;但是它们俩并不完美,数组是一种寻址方便,插入删除不容易的数据结构;链表是寻址困难,插入删除容易的数据结构原创 2018-12-23 20:26:19 · 1227 阅读 · 1 评论 -
再也不怕面试官问我类加载器了 超详细解析Android/Java之ClassLoader 双亲委派模型及热部署实践
虚拟机设计团队把类加载过程中的<font color=Crimson>通过一个类的全限定名来获取描述此类的二进制字节流</font>这个动作放到JVM外部去实现,以便让应用程序自己决定如何去获取所需的类,实现这个动作的代码模块就是类加载器;简单点说类加载器就是用来加载Class文件的,它负责将Class的字节码数据转换成JVM运行时数据区(内存)的Class对象原创 2019-07-24 20:49:33 · 2536 阅读 · 3 评论 -
Android源码解析之带你看system server进程启动流程及系统服务启动
System Server进程和Zygote进程可以说是Android世界中的两大最重要的进程,离开其中之一基本上系统就玩完了(这里还有一个Media Server进程,是由init进程fork而来,负责启动和管理整个C++ framework,包含AudioFlinger,Camera Service等服务);System Server负责启动和管理整个framework,基本上在Framework中的大多数服务都是在system server进程中以一个线程的方式存在的原创 2019-08-11 20:55:01 · 2653 阅读 · 4 评论 -
Android源码解析-掌握AsyncTask工作原理 串行执行原因和内存泄漏的处理
它本质上是一个封装了线程池和Handler的异步框架;它内部使用一个线程池,串行执行每一个线程,线程生命周期不用开发者管理,用来执行异步任务,通过Handler来进行回调更新UI,这一套业务也可以使用Thread来做,但是使用Thread有些麻烦,每次使用都要自己new一个线程,要自己管理其生命周期,而且android还不允许在非主线程的线程更新UI,这样的话thread运行得到的结果如果需要更新UI可能还需要发一个handler通知主线程更新界面,代码写起来比较凌乱不如asynctask一目了然好维护。原创 2019-08-25 20:10:59 · 1152 阅读 · 0 评论 -
从源码解析-Android中Activity启动流程包含AIDL使用案例和APP启动闪屏的缘由
在平时的使用中,我们启动一个Activity用的最多的方式有两种,一种是在手机桌面点击应用icon启动应用,即启动应用的第一个Activity,也就是在Launcher启动Activity;另一种是在应用内部通过startActivity方法启动Activity,今天就对这两种方式进行分析,多进行FrameWork层的分析非常有利于我们平时在应用层开发处理一些棘手的问题在Launcher启...原创 2018-08-21 19:28:59 · 2788 阅读 · 8 评论 -
从源码解析-ContentResolver与ContentProvider的联系
上一篇博客通过实例讲到了在一个APP中使用ContentResolver调用另一个APP的ContentProvider,获取数据。这篇博客继续来解析下它是如何去获取或者更新ContentProvider的数据的。 1.比如调用ContentResolver的insert方法,会走到这个类里的insert方法 public final @Nullable Uri insert...原创 2017-11-25 20:24:47 · 1281 阅读 · 0 评论 -
从源码解析-Android中进程间通信Binder机制之Service Manager 启动【三】
源码路径如下: framework/native/cmds/servicemanager/ - service_manager.c - binder.c具体功能如下:SM本身也是一个Server,是Binder IPC通信过程中的守护进程,负责所有Server进程的注册,并处理Client进程的查询Service Manager 启动前面说过,如果网络...原创 2018-08-01 14:36:13 · 670 阅读 · 0 评论 -
从源码解析-Android数据结构ArrayBlockingQueue
上一篇文章Android之阻塞队列LinkedBlockingQueue使用及源码解析讲到了LinkedBlockingQueue,与之相关的一个队列就是今天要讲到的ArrayBlockingQueue。 ArrayBlockingQueue也是一个阻塞队列,内部使用一个定长数组保存数据,在构造这个队列的时候必须要指定长度,如果队列已满再执行入队将会阻塞;如果队列为空再执行出队将会阻塞。 看看...原创 2018-06-23 17:29:09 · 1046 阅读 · 0 评论 -
从源码解析-Android数据结构之单向阻塞队列LinkedBlockingQueue的使用
在一篇分析AsyncTask源码中的文章中,我们看到了在线程并发中用到比较多的一个队列LinkedBlockingQueue,今天这篇文章就来分析下这个东西的使用。LinkedBlockingQueue:是concurrent包下的类,实现了BlockingQueue接口,是一种单向链表阻塞、线程安全的队列,数据处理逻辑是先进先出,应该说是作为生产者消费者模型的首选;可以指定最大容量,也可以不...原创 2018-06-23 15:40:35 · 4127 阅读 · 0 评论 -
从源码解析-Android中HandlerThread使用
继上篇文章Android之Handler源码分析/Looper,Message,Messagequeue三者关系之后,现在来总结下HandlerThread。产生背景平时我们在进行多任务操作的时候,会开启多个线程,但是多次创建和销毁线程是很消耗系统资源的;通常我们是在子线程里用Handler发消息将过程或者结果反馈给主线程;那如果是主线程要主动发消息去与子线程通信呢HandlerT...原创 2018-05-27 20:25:39 · 256 阅读 · 0 评论 -
从源码解析-Handler Looper Message Messagequeue关系 解决Handler引起的内存泄漏
在Android开发中Handler的使用肯定是少不了的,Handler使线程之间的通信变得那么简单,而且这个东西面试的时候也是少不了的一个问题,对它进行总结是有必要的。Handler是什么,它是Android给我们提供的一套用来更新UI的机制,我们可以用它来发送消息,也可以用它来处理消息。其实带来一个问题就是Android为什么设计只能通过Handler机制更新UI,最根本的原因是解决多...原创 2018-05-27 17:48:25 · 909 阅读 · 0 评论 -
从源码解析-Android数据结构之双端队列ArrayDeque 实现FIFO和LIFO队列
在之前分析AsyncTask源码的时候有看到其内部自定义线程池里使用到了ArrayDeque这个类去存放线程,今天这篇文章就对它进行解析。看到ArrayDeque这个名字会发现跟我们频繁使用的ArrayList很像,都是用其内部维护的数组存储数据,都是线程不安全的实现。来看看Google的介绍 Resizable-array implementation of the {@link D...原创 2018-06-25 19:26:30 · 1179 阅读 · 0 评论 -
从源码解析-Android之可重入锁ReentrantLock的使用
在前面文章分析几个队列的时候,可以看到里面都用到了ReentrantLock这个类,使用方法都是一样private final ReentrantLock lock = new ReentrantLock(); public void m() { lock.lock(); // block until condition holds try { ...原创 2018-06-26 19:20:05 · 1527 阅读 · 0 评论 -
从源码解析-Activity的setContentView是怎么加载XML视图的
不管你是一个刚接触Android开发的新手,还是一个深耕多年的老司机,打开AS新建一个项目开发APP,第一件事就是打开MainActivity,在onCreate方法里调用setContentView,将xml布局索引值传进去。很多人其实都没注意到这个方法是怎么一个逻辑,就是按照我们当时学习android开发的视频中老师说的,把布局文件放进去,我们的activity就有页面了;其实我在很长一段...原创 2018-07-04 19:21:45 · 1480 阅读 · 1 评论 -
从源码解析-Activity的View如何与ViewRootImpl关联
本文研究基于api24 上一篇谈谈Activity的setContentView是怎么加载XML视图的我们了解到了添加的布局文件中的View是如何被添加到Activity的窗口的,今天要解决的是添加到PhoneWindow的View是什么时候被绘制的。上一篇中有介绍到在PhoneWindw的generateLayout方法中最后有确定DecorView的内容和一个装载我们设置的布局的View...原创 2018-07-05 18:37:18 · 968 阅读 · 1 评论 -
从源码解析-Android中View的绘制流程及performTraversals方法
谈谈Activity的setContentView是怎么加载XML视图的 谈谈Activity的View怎么与View绘制工具ViewRootImpl关联的 在前面两篇文章中分析了View是如何跟绘制工具ViewRootImpl关联的,setContentView是如何把我们编写的xml视图添加到Activity中的,那今天就要分析下绘制工具ViewRootImpl是如何绘制我们Activit...原创 2018-07-11 15:30:13 · 4085 阅读 · 1 评论 -
从源码解析-Android中进程间通信Binder机制之Linux基础 【一】
背景我们知道,在操作系统中各个进程通常运行在独立的内存空间中,并且有严格的进程隔离机制来防止进程间的非法访问,因为不这样做就会引起很多的数据问题;但是问题又来了,那两个进程间怎么通信呢? 广义上讲,进程间通信(Inter-process communication IPC)是指运行在不同进程(不论是否在同一台机器上)中的若干线程间的数据交换,在多数操作系统中实现方法有如下几种:共享内存(...原创 2018-07-26 20:07:25 · 1909 阅读 · 3 评论 -
从源码解析-Android中进程间通信Binder机制之Binder驱动 【二】
Binder驱动是Android操作系统才有的,我们知道Android系统是基于Linux内核,所以Binder驱动也是一个标准的Linux驱动,所以它的注册和使用等操作也跟标准驱动一样。Binder驱动会将自己注册成一个misc device,Linux中的misc device意思是杂项设备,也就是大杂烩的意思,它的注册和使用比较简单;然后创建/dev/binder 设备节点,Binder...原创 2018-07-30 19:38:47 · 726 阅读 · 0 评论 -
从源码解析-Android数据结构之双向阻塞链表LinkedBlockingDeque的使用
LinkedBlockingDeque是一个双向阻塞链表,线程安全的队列(与LinkedBlockingQueue类似,不过LinkedBlockingQueue是一个单向的阻塞链表),需要指定容量,如果开发者没有指定,那就默认为Integer.MAX_VALUE,它的内部也是维护了一个链表节点。看看内部节点类/** Doubly-linked list node class ...原创 2018-06-23 22:43:02 · 983 阅读 · 0 评论