自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 资源 (1)
  • 收藏
  • 关注

原创 Retrofit2 工作原理解析(一)

Retrofit2 工作原理解析(一)概述Retrofit是square公司开源的一款类型安全的http请求框架,用于Java和Android程序。Retrofit可以说是restful风格的一个代表作,可能有人对于restful设计风格不太熟悉,在此有必要做一下解释;restful(Representational State Transfer):表现层状态转化,结合这里的Retrofi...

2018-07-19 14:20:32 2435

原创 Android APT技术解析与实战

Android APT技术解析与实战Java提供了插入式注解处理器,用以在编译期间对代码进行检查或者生成相关的代码。而APT,是一种在代码编译期间处理注解,按照一定的规范,生成相应的Java文件的技术。现在很多流行的第三方库,如Dagger2、ButterKnife等,都是采用APT技术实现的。APTAPT(Annotation Processing Tool)是一种注解处理工具,它对...

2018-07-11 18:17:17 3995

原创 Java泛型与泛型擦除

目录目录Java泛型泛型擦除方法重载与方法签名Java泛型泛型是JDK1.5的一项新增特性,它的本质是参数化类型应用,也就是说所操作的数据类型被指定为一个参数。这种参数类型可被应用于类、接口和方法中,分别被称为泛型类、泛型接口、泛型方法。在泛型出现之前,Java是通过Object是所有类型的父类和类型强制转换这两个特性来实现类型泛化的。泛型擦除Jav...

2018-07-01 14:09:11 2262

原创 设计模式——观察者模式

观察者模式——轻松解耦观察者模式——轻松解耦定义UML类图表示ListView源码中的观察者模式在曾经的两次面试,被这个模式搞的迷糊,深深的不甘之下,终于忍不住系统的来了解一下这个模式。通常来讲,观察者模式的终极目的是解耦,降低观察者和被观察者之间的依赖,甚至做到毫无依赖,常常用于GUI系统和订阅——发布系统。就拿GUI系统来讲,随着项目的推进,UI模块可能经常性的发生...

2018-03-24 14:44:24 563

原创 Android高效加载Bitmap及缓存机制

Android高效加载Bitmap及缓存机制Android高效加载Bitmap及缓存机制高效加载BitmapBitmap缓存机制LruCacheDiskLruCache在Android系统中,由于Bitmap的特殊性以及Android对单个应用施加的内存限制等因素,导致加载Bitmap时很容易出现内存溢出问题,即所谓的OOM。那么,如何高效加载Bitmap来降低内存...

2018-03-16 16:03:57 1097

原创 MaterialDialogs源码解析(三)

概述前面两篇文章解析了materialdialogs库的使用效果以及整体架构,从这篇文章开始,解析源码实现的细节部分,由于这部分内容涉及的知识比较多,所以在此只解析关键内容。MDRootLayoutMDRootLayout作为此dialog的根布局,是继承自ViewGroup的自定义视图,形象展示图如下图所示:其通过聚合的方式引入了titleBar、content和buttons,前两者属于View

2017-07-10 15:26:00 783

原创 MaterialDialogs源码解析(二)

概述前面一篇文章介绍了materialdialogs这个库的使用效果以及背景,这篇文章则来解析一下这个库的整体架构。从移动开发的角度来将,这个库仅仅是提供了一个用简单的方法实现复杂的对话框的一种手段,但是其内部的实现却稍微有一点复杂。整体来讲,它应用了特殊的建造者模式,了解建造者模式有助于理解该框架。核心类关系图如下: 架构核心思想MDButton:继承自TextView的自定义按钮,用于dia

2017-07-06 18:04:52 398

原创 MaterialDialogs源码解析(一)

概述不久前接触到Material Dialogs这个第三方库,感觉用起来很方便,恰巧刚刚研究了View的整个绘制及工作原理,所以就产生了从源码角度了解一下这个库是如何实现的,进而增加对自定义View的认识。 要想了解一个第三方库,首先要弄清楚它是什么,即它的表现形式是怎样的?顾名思义,Material Dialogs是一个对话框,一个符合material思想的定制版的对话框。根据我的理解,该库的核

2017-07-06 14:39:52 1450

原创 Android混淆

Proguard特性压缩:Java源代码通常被编译为字节码,虽然字节码比源代码更简洁,但它本身仍然会包含很多无用的代码。Proguard的压缩功能通过分析字节码,能够检测并移除没有使用的类,字段,方法和属性;优化:优化Java字节码,同时移除没有使用到的指令;混淆:使用无意义的简短字母组合对类名、字段名、方法名进行重命名;预检验:对上述处理后的代码进行预检验;混淆配置buildTypes

2017-06-06 15:42:58 428

转载 Android注解研习录

概要在Java和Android的开发中,自从注解问世,越来越受开发者们所青睐,可以说,注解大大简化了开发者的开发作业。无论是运行时注解,还是编译时注解,都被广泛的使用着。而且,市面上产生了好多依赖注解而崛起的开源库,Google官方更是为了Android而推出了Support Annotation。如何定义注解注解是Java引入的特性,通过在Java源代码中引入注解标签,可以在编译

2017-06-01 10:19:04 266

原创 Android NDK开发基础知识

概要Android NDK开发对于初学者来说,往往会有丈二和尚摸不着头脑之感,所以在此处理清一些基础知识,总体来说有以下几个方面:ABI概念的理解。使用C++的两种方式(Android Studio)。Gradle配置.so文件的格式。使用.so的注意事项。ABI概念的理解到目前为止,Android系统总共支持7种不同的CPU架构,分别是:ARMv5ARMv7x86MIPSARM

2017-05-31 12:11:17 503

原创 Android IOC 依赖注入框架

概述对于Android从业者来说,绝大多数人都听说或者用过IOC框架,典型的第三方库有butterknife和xutils;它们的优势很明显,可以让你避免写一堆findViewById()代码,通过注解帮你注入所有的控件。举个例子:一个Activity需要setContentView()方法设置布局,你可以通过注解该Activity来代替;该Activity有许多控件,需要findViewById(

2017-05-10 23:18:19 517

原创 MD5加密算法工具类

MD5加密

2017-05-09 18:00:56 420

原创 Android View基础知识

概述对于view的基础知识来说,基本上都是些概念性的东西,有些内容重要但又不太容易理解,之前研究过一次,但是隔了很久不用,有些概念弄混淆了,导致不得不重新去查找资料学习,这也就是我写这篇博客的原因。View的位置参数view的位置由它的四个顶点来决定,分别是left、top、right、bottom,这四个属性确定了它相对父容器所在的位置:即left是view左上角相对于父容器的横坐标,top是vi

2017-05-09 17:53:22 374

原创 虚拟机类加载机制--《深入理解Java虚拟机》学习笔记

虚拟机类加载机制–《深入理解Java虚拟机》学习笔记一、类加载机制概况 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型,这就是虚拟机的类加载机制。 与其他语言不同的是,java语言中,类的加载、链接和初始化等操作是在程序运行期间完成的,所谓的动态加载机制就是根据java这一特性产生的。虚拟机的整个工作流程可

2017-04-15 00:20:59 432

原创 垃圾收集算法与内存分配策略--《深入理解Java虚拟机》学习笔记

垃圾收集算法与内存分配策略–《深入理解Java虚拟机》学习笔记一、对象存活算法判定1、何为引用 如果reference类型的数据中存储的数值代表另一块内存的起始地址,则称这块内存代表着一个引用;有一类对象,当内存空间还足够时,则能保留在内存之中,如果内存空间在进行垃圾收集后还是很紧张,则根据引用类型抛弃这些对象,进行回收;引用类型如下:强引用:普遍存在,类似于“Object obj = new

2017-04-09 21:06:08 499

原创 Java内存区域与对象--《深入理解Java虚拟机》学习笔记

Java内存区域与对象《深入理解Java虚拟机》学习笔记 一、java内存区域 - 程序计数器 程序计数器是一块较小的线程私有的内存区域,存储当前线程所执行的字节码指令的地址,字节码解释器就是通过改变该计数器的值来选取下一条需要执行的字节码指令;如果线程正在执行的是一个java方法,程序计数器记录的是正在执行的虚拟机自己吗指令的地址;如果正在执行的是native方法,程序计数器为空;

2017-04-09 11:02:40 498

原创 Rxjava2+MVP+Retrofit2关系图

Rxjava2+MVP+Retrofit2关系图

2017-04-07 14:39:38 442

原创 Android Binder通信研习录

Android Binder通信研习录Binder作为Android进程间通信最重要的工具,一直以来困扰着我,这两天翻看了几位大神的博客,基本上都是从底层+应用层完全讲解,奈何本人对Jni不是很熟悉,所以忽略了底层的原理解析,现将应用层的原理整理下来,方便日后查看,如果有什么地方不准确,欢迎阅览者指出。相关概念解析IInterface:系统提供的一个接口,所有可以在Binder中传输的接口都必须继

2017-03-30 17:28:09 354

原创 Android Material Design学习笔记

Android Material Design学习笔记Android Material Design: (第一天) 一、Material Design新的特性 1、物理特性(高度、厚度) 2、阴影效果,增加了实体感 3、动画接近于现实中的动作(水波效果、转场特效等) 二、应用场景(都能用来做什么) 1、Android中各种地方均可应用(Activity切换特效、沉浸式动画效果、Rec

2017-03-30 09:15:59 599

原创 Android Handler消息机制研习录

Android Handler消息机制研习录知识这种东西,隔段时间不用,就会忘记,翻来覆去看了几遍源码,可是每次用的时候还是忍不住再去复习一下实现过程,生怕自己忘记了。现在将它记录下来,方便日后查看。Android消息机制主要有以下几方面组成

2017-03-21 11:15:30 321

原创 Java常用Collections集合实现原理

Java常用Collections集合实现原理一、HashMap集合 1、HashMap的结构:底层是一个数组,每个数组元素是一个链表,实现了Map接口(实现Map接口的集合允许有重复值),key和value都可以为空 2、方法实现原理:当HashMap.put时,先根据key计算Hash值,然后根据hash值找到这个元素在数组中的位置,如果数组中该位置已经有元素了,那么先遍历该位置的链表,如果

2017-03-16 13:07:38 1207

原创 Android轮播实现

Android轮播实现前几天研究了Android的事件分发机制和View的实现流程,然后按照教程实现了轮播图,现在赶紧整理一下写成博客,方便日后参考,防止自己忘记。整个实现过程是一个由浅入深,循序渐进的过程,所以,实现的思路很重要。 首先要明白,轮播图核心是一个自定义ViewGroup,而非自定义View,在此称之为LoopViewGroup,大体的实现思路主要有一下几点:LoopViewGro

2017-03-16 00:24:11 389

原创 Android事件分发研习录

Android事件分发机制研究了几天的事件分发,该是将它写下来的时候了,作为一次学习经历的总结,也为了避免后面再次使用时进坑。说起事件,估计大家最熟悉的莫过于按钮的点击事件,然后可能就是View的触摸事件,但是它们的实现过程是怎样,不知道又有多少人能说的清楚。事件分发的过程,实际上就是当一个MotionEvent(触摸事件)产生后,系统将这个事件分发到具体的View的过程。事件分发中,最主

2017-03-14 10:03:20 263

原创 Android动画学习总结

Android动画学习总结一、Android动画分类:View动画:场景里的View不断的做变换(平移、旋转、拉伸、透明度)产生的动画效果;帧动画:按顺序播放一系列图像产生的效果;属性动画:Android3.0开始增加的一种动画效果,通过动态改变View对象的属性值实现。二、View动画:View动画分为TranslateAnimation、RotateAnimation、ScaleAni

2017-02-28 14:10:21 391

原创 RemoteViews内部实现机制及应用

RemoteViews内部实现机制及应用一、介绍 RemoteViews是一种特殊的View视图结构,作用是显示并更新其他进程中的View界面;因其实现了Parcelable接口,所以可以实现跨进程通信;典型的应用场景是通知栏和桌面小部件开发(两者均是运行在系统进程中);因其运行在远程的进程中(此处可以理解为系统进程),所以没有办法通过findViewById()获取子控件,但是内部

2017-02-27 10:24:28 446

原创 XMLUtil工具类读取XML或properties格式的配置文件

java中通常需要将一些客户端设置项写在配置文件中,以避免重复编译导致的繁琐 xml文件:config.xml<?xml version="1.0" encoding="UTF-8" ?><config> <charType>B</charType> <className>DatabaseLoggerFactory</className></config>现在要读取该文件中的

2016-12-30 09:28:23 3236

原创 Git命令大全

git命令大全

2016-12-21 15:03:31 310

翻译 Android热更新原理记录

Android热更新原理学习笔记

2016-11-30 14:01:50 552

原创 自定义Android SearchView

自定义Android SearchView

2016-11-28 13:37:52 645

原创 Glide图片发请求+缓存简单实用解析

1、引入依赖:compile 'com.github.bumptech.glide:glide:3.7.0'2、配置        1、 配置需要实现 GlideModule,在此,GlideModule 相当于 Application 的角色,属于全局配置,在该实现类中可以设置图片缓存信息;        2、在 AndroidManifest.xml 中需要配置

2016-11-07 13:49:50 2338 2

原创 Android集合用法整理

Set 接口        Set 不允许包含相同的元素,如果试图把两个相同元素加入同一个集合中,add 方法返回 false。Set 判断两个对象相同不是使用 == 运算符,而是根据 equals 方法。也就是说,只要两个对象用 equals 方法比较返回 true,Set 就不 会接受这两个对象。HashSet        1 不能保证元素的排列顺序,顺序有可能发生变化   

2016-11-04 13:21:58 5269

原创 通过Rxjava和RxAndroid实现的EventBus

初次探索,可能会有很多问题,需要慢慢修改!依赖第三方库:Rxjava和RxAndroid     compile'io.reactivex:rxjava:1.1.5' compile 'io.reactivex:rxandroid:1.2.0'/** * 通过rxjava、rxandroid实现EventBus功能 * 使用方式: * 1、注册时返回一个Obser

2016-10-14 14:57:11 372

MaterialDialogs_Core源码相关类及方法说明

materialdialogs core源码分析说明

2017-07-11

空空如也

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

TA关注的人

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