自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(27)
  • 收藏
  • 关注

原创 android进阶之Watchdog检查系统异常机制

Watchdog简介Watchdog是Android系统提供的以后总检查系统异常的机制,正如其名,“看门狗”,它看的是Android框架层的几个核心服务。Watchdog一旦发现的AMS、WMS和PMS等核心服务的主线程阻塞,就清除systemserver进程,我们知道,一单SystemServer进程停止,Zygote进程就会自杀,系统就会重启。Watchdog继承Thread,它是一个线程类,它...

2018-01-18 11:52:26 2097

原创 android进阶之了解Zygote进程的启动及“孵化”

Zygote进程基础介绍Zygote中文翻译为“受精卵”,正如其名,它主要用于孵化子进程。在Android系统中有以下两种程序: 1. java应用程序,主要基于ART虚拟机,所有的应用程序apk都属于这类 2. native程序,也就是利用C或C++语言开发的程序,如bootanimation。所有的Java应用程序进程及系统服务SystemServer进程都由Zygote进程通过Linux的

2017-12-25 11:35:34 1841 1

原创 理解HTTPS

HTTPS简介HTTPS其实是有两部分组成:HTTP + SSL / TLS,也就是在HTTP上又加了一层处理加密信息的模块。也就是说使用HTTPS协议之后在网络上传输的数据是加密的密文,即便进行拦截后没有密钥进行解密的话也就是一串乱码。端口号是443HTTPS其实就是身披SSL协议外壳的HTTP。概念解析明文:是指原始干净的数据,比如”I’m a boy.”。 密文:是指通过加密算法加密后的数据

2017-12-21 16:31:11 381

原创 android进阶之了解Android系统与开机过程

Android简介Android系统的源代码数量非常庞大,这些代码主要分成4层,从低到高为Linux内核层、系统库层、应用程序框架层和应用程序层,它们分别由驱动工程师、系统工程师、框架工程师和应用程序工程师来开发。如图所示为整个Android系统的框架图: Linux内核层Android是基于Linux内核的,Linux内核为Android框架层提供了非常和核心的支持,比如Camera驱动、USB

2017-12-21 16:29:10 394

原创 拆轮子系列之理解GreenDao框架源码

GreenDao概述如果Android项目中要使用GreenDAO框架,需要先创建一个Java项目用于生成实体类和DAO类,然后在Android项目中使用这些类,在此过程中分别需要对Android项目添加GreenDAO的核心包依赖和对Java项目添加generator包依赖,所以解析GreenDAO的源码需要解析两部分,而这里只解析GreenDAO核心包在Android项目中的工作原理,gener

2017-12-13 21:40:16 359

原创 拆轮子系列之剖析EventBus源码

EventBusEventBus是我们在项目当中最常用的开源框架之一。对于EventBus的使用方法也是非常的简单。然而EventBus内部的实现原理也不是很复杂。在这里便针对EventBus3.0的源码进行一下详细的分析。对于EventBus的详细使用可以参考[EventBus 3.0初探: 入门使用及其使用 完全解析](http://www.jianshu.com/p/acfe78296bb5)

2017-12-13 21:38:39 293

原创 策略模式及Android源码中的应用

策略模式策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。使用场景: 1. 针对同一类型问题的多种处理方式,仅仅是具体行为有差别时。 2. 需要安全地封装多种同一类型的操作时。 3. 出现同一抽象类有多个子类,而又需要使用if-else或者switch-case来选择具体子类时。使用栗子: 计算图书价格,初级会员没有

2017-11-28 21:02:49 430

原创 工厂方法模式及在Android源码中的应用

工厂方法在任何需要生成复杂对象的地方,都可以使用工厂方法模式,复杂对象适合使用工厂方法模式,用 new 就可以完成创建的对象无需使用工厂方法模式。优点:降低了对象之间的耦合度,工厂模式依赖于抽象的架构,其将实例化的任务交由子类去完成,有非常好的扩展性。 缺点:每次为工厂方法添加新的产品时就要编写一个新的产品类,同还要引入抽象层,必然会导致代码类结构的复杂化。工厂方法模式的通用模式代码如下: 1.

2017-11-28 21:01:48 630

原创 观察者模式及在Android源码中的应用

观察者模式观察者模式是一种行为类模式,它定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新。观察者模式是一个使用率非常高的模式,它最常用在GUI系统、订阅–发布系统。因为这个模式的一个重要作用就是解耦,将被观察者和观察者解耦,使得它们之间的依赖性更小,甚至做到毫无依赖。比如安卓的开源项目EventBus、Otto、AndroidEventBus等事

2017-11-28 21:00:04 412

原创 深入理解LayoutInflater.inflate()

LayoutInflater的使用形如 LayoutInflater.from(context).inflate(R.layout.test,root,true) 的使用在android开发中很常见,但许多人不但不清楚LayoutInflater的inflate()方法的细节,而且甚至在误用它。这里的困惑很大程度上是因为Google上有关attachToRoot(也就是inflate()方法第三个参

2017-11-22 22:18:38 398

原创 集合实现原理汇总

集合框架图ArrayList实现原理对于ArrayList而言,它实现List接口、底层使用数组保存所有元素。其操作基本上是对数组的操作。private transient Object[] elementData; ArrayList提供了三种方式的构造器,可以构造一个默认初始容量为10的空列表、构造一个指定初始容量的空列表以及构造一个包含指定collection的元素的列表,这些元素按照该co

2017-11-22 22:16:27 497

原创 JVM之线程安全与锁优化

线程安全当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的;java 语言中的线程安全java中各种操作共享的数据分为以下5类:不可变, 绝对线程安全, 相对线程安全,线程兼容,线程对立; * 不可变对象 该对象一定是线程安全的,无论是对象的方法实

2017-11-13 19:27:42 341

原创 JVM之内存模型与线程

内存一致性协议由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。因此在CPU里面就有了高速缓存。当程序在运行过程中,会将运算需要的数据从主存复制一份到CPU的高速缓存当中,那么CPU进行计算时就可以直接从它的高速缓存读取数据和向其中写入数据,当运算结束之后,再将高速缓存

2017-11-13 19:27:05 332

原创 JVM之晚期(运行期)优化

概述Java程序在运行的期间,可能会有某个方法或者代码块的运行特别频繁时,就会把这些代码认定为“热点代码”。为了提高热点代码的执行效率,在运行时JVM会将这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler,JIT编译器)。解释器与编译器事实上,现在许多主流的商用虚拟机,都同时包含有解释器与编译器,解释器与编译器两

2017-11-07 19:23:01 397

原创 JVM之早期(编译器)优化

概述JVM的编译器可以分为三个编译器: 1. 前端编译器:把.java转变为.class的过程。如Sun的Javac、Eclipse JDT中的增量式编译器(ECJ)。 2. JIT编译器:把字节码转变为机器码的过程,如HotSpot VM的C1、C2编译器。 3. AOT编译器:静态提前编译器,直接将*.java文件编译本地机器代码的过程。本节讲述的仅限于第一类编译过程Javac编译器Jav

2017-10-24 21:14:05 442 1

原创 JVM之字节码执行引擎

概述在Java中,编译器讲源代码转成字节码,那么字节码如何被执行的呢?这就涉及到了JVM的字节码执行引擎,执行引擎负责具体的代码调用及执行过程。就目前而言,所有的执行引擎的基本一致: 1. 输入:字节码文件 2. 处理:字节码解析 3. 输出:执行结果。物理机的执行引擎是由硬件实现的,和物理机的执行过程不同的是虚拟机的执行引擎由于自己实现的。运行时栈帧结构每一个线程都有一个栈,也就是前文中提到

2017-10-19 21:55:37 697

原创 JVM之类加载机制

类加载过程类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中准备、验证、解析3个部分统称为连接(Linking)。如图所示: 加载、验证、准备、初始化和卸载

2017-10-16 21:22:45 287

原创 JVM之类文件结构

概述实现语言无关性的基础仍然是虚拟机和字节码存储格式。虚拟机不和包括Java在内的任何语言绑定,它与“Class”文件这种特定的二进制文件格式所关联,Class文件中包含了Java虚拟机指令集和符号表以及若干其它辅助信息。Java语言中的各种变量、关键字和运算符号的语义最终都是有多条字节码指令组合而成,因此字节码命令所能提供的语义描述能力肯定会比Java语言本身更加强大。Class类文件结构任何一个

2017-10-16 21:18:35 332

原创 JVM之垃圾收集器与内存分配策略

对象已死吗在堆里面存放着java世界几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象哪些还“存活”,哪些已经“死去”引用计数算法给对象中添加一个引用计数器,每当有一个地方引用它的时候,计数器就加1,;当引用失效时,计数器就减1;任何时刻计数器为0的对象就是不可能再被使用的。java虚拟机中没有选用引用计数算法是来管理内存,其中最主要的原因是它很难解决对象之间互相循环引用的

2017-10-14 15:50:14 340

原创 JVM之内存运行时区域

JVM数据区域java虚拟机所管理的内存将会包括以下几个运行时数据区域: 程序计数器程序计数器是一块较小的空间,它可以看做是当前线程所执行的字节码的行号指令器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。每条线程都有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,我们称这类内存区

2017-10-14 15:47:12 322

原创 源码分析Android中的线程和线程池

概述线程分为主线程和子线程,主线程主要处理和界面相关的事情,而子线程则往往用于执行耗时的操作。在操作系统中,线程是操作系统调度的最小单元。 - AsyncTask封装了线程池和Handler,它主要方便开发者在子线程中更新UI。 - HandlerThread是一个具有消息循环的线程,在它的内部可以使用Handler。 - IntentService是一个服务,系统对它进行了封装使其可以更方便

2017-07-25 17:58:01 318

原创 Builder设计模式和AlertDialog的源码分析

Builder模式是一步步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细的控制对象的构造流程。该模式是为了将构造复杂对象的过程和它的部件解耦,使得构建过程和部件的表示隔离开来。栗子:我们通过一个例子来引出Builder模式。假设有一个Person类,我们通过该Person类来构建一大批人,这个Person类里有很多 属性,最常见的比如name,age,we

2017-07-20 20:52:14 381

原创 RemoteViews的内部机制

RemoteViews的作用是在其他进程中显示并更新View的界面,主要用于通知栏和桌面小部件。RemoteViews并不能支持所有的View类型,它所支持的所有类型如下所示:Layout:FrameLayout、LinearLayout、RelativeLayout、GridLayoutView:AnalogClock、Button、Chronometer、IamgeVi

2017-07-18 12:55:27 377

原创 View的工作原理

通过看书系统地学习了下View的工作原理,包括measure,layout,draw过程,对View的底层实现理解较为清晰了些,对理解和掌握自定义View也有很大帮助。。。

2017-07-17 21:41:07 250

原创 Android中的IPC方式

之前一直对android的IPC机制没什么了解,最近在看了《Android开发艺术探索》后,对其中的多进程间的通信有了一定的了解。算是自己的读书总结笔记吧,主要总结下多进程间的通信的方式

2017-05-22 18:06:16 506

原创 源码分析多进程下的SharedPreferences

多进程下的SharedPreferences情况先启动主进程并获取SharedPreferences对象,然后对值进行修改,然后启动其他进程并获取SharedPreferences对象,能取得修改后的值,但此时如果再对此值进行修改,均不能对其他进程产生作用。总结下来就是,其他进程在启动时获取到的SharedPreferences的值只能是这个进程启动前这个值的最后值,即在进程启

2017-05-20 10:32:54 588

原创 装饰者模式Decorator

装饰者模式,动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更加有弹性的替代方案结构说明1、Component抽象组件,是一个接口或者是抽象类,就是定义我们最核心的对象,也就是最原始的对象。(注:在装饰模式中,必然有一个最基本、最核心、最原始的接口或者抽象类充当Component抽象组件)2、ConcreteComponent具体组件,

2017-04-18 17:25:17 445

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除