自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

taiyang5946的博客

好好学习

  • 博客(25)
  • 收藏
  • 关注

原创 Picasso图片加载源码分析

Picasso是Square出品的一款轻量级的图片加载框架,它的api设计也非常的简单,Picasso常见的用法如下:Picasso.with(context).load(url).reesize(x,y).into(imageview);,就这简简单单的几步就可以实现图片的加载,那么在这几步中到底做了哪些事情,那么本篇我们就来说说Picasso的原理。首先来一张Picasso的整体结构图...

2018-05-01 17:18:26 252

原创 Retrofit源码分析

在上一篇中介绍来Retrofit如何使用,如果有不清楚Retrofit的使用的话可以看我的上一篇文章Retrofit快速入门使用 那么这一篇我们就从源码的角度来深入的了解Retrofit的实现,本篇文章基于Retrofit2.4.0来分析。一般我们会使用如下方式来创建一个retrofit对象,Retrofit retrofit = new Retrofit.Builder() ...

2018-04-19 18:27:58 256

原创 Retrofit快速入门使用

Retrofit和OkHttp都是出自Square,目前在Android端的网络请求框架,Retrofit+OkHttp+RxJava组合算是最流行的了。那么本篇文章就先来介绍一下Retrofit的使用方式。Retrofit的GitHub地址:https://github.com/square/retrofitRetrofit是一个基于RESTful API的网路请求工具,它能够将一个ja...

2018-04-19 18:25:51 322

原创 ClassLoader加载机制深入分析

我们知道在java程序中,需要将我们写的java文件编译为class文件才能被使用,一个java程序也是由许许多多的class文件组成。在程序运行的时候是需要将这些class文件加载到内存中才能被我们使用的,而且这些class文件也不是一次性的被加载进内存的,它是什么时候需要就什么时候加载,加载这些class文件到内存中就需要使用ClassLoader类加载器来完成。一般情况下我们不需要关系Cla...

2018-04-11 20:42:40 3342 1

原创 深入理解AIDL

在上一篇文章中讲了如何使用AIDL来进行跨进程通信,还没有看过的可以先看看《Binder机制-AIDL的使用》。 继续使用上一篇文章中的示例,我们来看看aidl文件生成的java类。package com.aidl.server;public interface ILoginManager extends android.os.IInterface { public stati...

2018-04-11 20:37:52 356

原创 AIDL的入门使用

android中为了能够实现高效率的跨进程通信,实现了一种特殊的IPC(inter-process communication)跨进程通信方式,AIDL(android interface definition language,android接口定义语言),该篇主要以一个示例来讲解aidl在实际开发中如何使用。这里我们以一个登陆为例,调用远端的登录接口,通过callback返回结果。对于...

2018-04-11 20:36:17 201

原创 从源码角度理解invalidate()和postInvalidate()的区别

我们知道Android中要触发View的更新,View提供了两个方法invalidate()和postInvalidate(),它们的区别是invalidate()需要在主线程中调用,否则抛出异常,而postInvalidate()可以在子线中调用,那么我们就通过源码来加深对它们的理解吧。查看postInvalidate()的源码:public void postInvalidate() ...

2018-04-11 20:33:44 479

原创 AndFix深入源码分析

AndFix是阿里出品的一款轻量级热修复框架,它可以在应用执行期间去修复那些有bug的方法。它的实现思路其实并不复杂,首先它需要通过一个apkpatch工具来将一个有bug的apk和一个已经修复好了bug的apk进行对比,将修复好的方法提取出来,生成一个xxx.apatch文件,该文件实际上是一个压缩文件,它里面包含了修复好的一个.dex文件和该文件的一些描述信息文件META-INF,如图所示...

2018-04-11 20:32:21 131

原创 通过源码理解LruCache的实现

LRU的全称是Least Recently Used,表示最近最少使用,它的实现主要是靠内部的一个LinkedHashMap来实现的,它内部维护了一个LinkedHashMap对象集合,所有的数据都是保存在该集合中的。LruCache是内存缓存,默认情况它缓存的数据都是强引用的,如果需要使用在本地磁盘缓存的话,可以使用DiskLruCache来实现。下面通过阅读源码来理解LruCache的...

2018-04-11 20:30:01 109

原创 AsyncTask源码分析

AsyncTask是Android提供的一个轻量级的处理UI刷新的类,它提供了在子线程处理耗时任务并在UI线程刷新的功能,它实际上就是一个Handler+Thread,内部封装了这两者便于我们来简单编写UI刷新功能的代码。AsyncTask的使用非常简单:继承AsnycTask类,指定三个泛型参数,实现doInBackground(Result)方法,该方法用来处理耗时操作,会在子线程中...

2018-04-11 20:27:44 137

原创 Volley源码分析

Volley是一个轻量级的、适合请求频繁但是请求数据很小的场景的网络请求框架,所以它并不适合文件下载等请求数据量大的情况。Volley是google官方出品的,但是并没有方法到SDK中,它的源码在android源码framework目录下面,必须我下了一个android7.1.1_r28这个分支上的源码,android_7_1_1_r28\frameworks\volley,所以如果需要使用vol...

2018-04-11 20:26:20 111

原创 Volley中的缓存策略

Volley实现了对请求响应的结果进行磁盘缓存,这样就不用每次都从服务器上请求数据。Volley的缓存是在DiskBasedCache这个类中实现的,它是在创建请求队列的时候被创建出来的。private static final String DEFAULT_CACHE_DIR = "volley";File cacheDir = new File(context.getCacheDir()...

2018-04-11 20:24:14 365

原创 java设计模式-策略模式

在我们需要实现一个功能的时候,可以有多种算法来实现的时候,我们可以使用if…else或者case来选择对应的算法来实现功能。但是如果又有新的算法添加进来的时候,我们不得不重新修改之前的代码。那么如何才能够对其进行优雅的编码而不会在有变化的时候去修改我们的原来的代码呢?定义策略模式定义了一系列的算法,它们具有共同的一些通性,通过这个通性纽带关联起来,在使用算法的时候可以相互切换。策略模式将算法的本身实

2017-12-02 18:22:40 119

原创 java设计模式-原型模式

原型模式,顾名思义就是对现有的一个对象进行复制克隆出一个全新的对象。被复制的对象就叫做原型对象,复制出来的克隆对象和原型对象具有相同的属性和方法。在一下情况我们一般会考虑使用原型模式来创建对象:将对象交给外部处理的时候,为了防止外部操作对象修改数据导致其他地方受影响(实际传递的都是对象的引用,所以如果多个地方引用了该对象可能会造成不必要的麻烦),所以可以考虑使用原型模式来克隆出一个新的对象,及我们

2017-12-02 18:21:50 133

原创 java设计模式-Builder建造者模式

在实际开发过程中,我们可能遇到过这么一个问题:创建一个比较复杂的对象的时候,它有特别多的属性,比如需要创建一个电脑对象,我们就需要设置例如主板、显卡、内存、显示器、鼠标、键盘等等一系列的值。可能比较常规的做法如下:public class Computer { private String graphics; private String memory; private St

2017-12-02 18:20:44 160

原创 java设计模式-工厂模式

工厂模式是我们日常开发中经常使用的设计模式。当我们需要创建一些比较负责的对象的时候,为了将对象的初始化部分进行隔离,可以使用工厂模式来设计我们的代码。 一般来说工程模式可以分为一下3种方式:简单工厂模式、工厂方法模式、抽象工厂模式。简单工厂模式简单工厂方法模式又叫做静态工厂方法模式,它也是最简单的一种,所有的实例对象都是由一个工厂类来创建。简单工厂模式一般来说需要具备3种元素: * 抽象产品类或

2017-12-02 18:19:24 122

原创 java设计模式-单例模式

单例模式在我们日常开发中算是使用频率最高的设计模式了,为什么单例模式的使用频率会这么高呢?有时我们的对象会占用一些系统资源,所以我们需要保证这些对象在整个系统中只有一个实例对象。甚至在我们自己设计类的时候,如果这个类的对象存在多个的时候可能会对我们的功能造成一定影响,我们都可以将其设计成一个单例的形式。就好比一个公司在一个时间只会存在一个董事长、一个国家最会存在一个总统或者主席是一样的道理。单例类的

2017-12-02 18:16:21 128

原创 java设计模式介绍

一、设计模式的六大基本原则1.单一职责原则(Single Responsibility Principle,SRP)一个类而言,应该仅有一个引起它变化的原因。通俗的说就是一个类应该是一组性质相似,相关性很高的方法和属性的集合。2.开闭原则对扩展是开发的,对修改是封闭的。在维护升级我们的代码的时候,我们应该尽量不去修改之前的代码而破坏它现有的结构,而是应该通过扩展继承的方式在进行修改。3.里氏替换原则

2017-12-02 18:15:28 99

原创 Android中Handler的源码解读

很早之前就Handler的分析,不过感觉有点乱乱的,所以趁着有时间就将其改了改。      Handler是我们android开发中经常使用的一个类,一般我们在子线程中做了耗时操作后使用handler来发送一个消息到主线程中去刷新UI,因为Android要求UI的刷新必须在主线程中来执行,所以使用handler来实现我们的目的是非常方便的。我们一般会使用handler来做刷新UI的操作,但是ha

2017-12-02 18:07:06 201

原创 ThreadLocal源码分析

在理解Handler、Looper之前,先来说说ThreadLocal这个类,听名字好像是一个本地线程的意思,实际上它并不是一个Thread,而是提供一个与线程有关的局部变量功能,每个线程之间的数据互不影响。我们知道使用Handler的时候,每个线程都需要有一个looper对象,那么andorid中是怎么保存这个对象的呢,使用的就是ThreadLocal。首先我们来看看主线程中looper是怎么初始

2017-12-02 18:03:26 120

原创 Pandas学习

Series和DataFrame是Pandas中最重要的两个数据结构,Series类似numpy中的一维数组,DataFrame类似numpy中的二维数据,它们除了可以使用numpy中的方法外,还增加了索引这个功能,DataFrame中有行的index和列的index。1、创建SeriesSeries除了包含一个数组外,还有一个对数组每个元素的一个index索引,这个索引默认从0开始,当然也可以自己

2017-09-10 01:00:53 181

原创 Numpy使用入门

numpy是一个数值计算库,它提供了对矩阵的计算操作(不知道矩阵是什么的就先去补补吧),虽然python自带的list也可以表示矩阵的形式,但是明显的它并没有提供矩阵相关的计算能力。同时它也具备数组的能力,提供了对n维数组的丰富操作。下面就介绍numpy的简单使用方式。一、numpy的几个属性当我们创建了一个numpy数组后,它就默认自带了某些属性。ndim:数组的维数,比如一维数组、二维数组等

2017-09-05 23:08:23 361

原创 AndroidStudio下freeline秒级编译集成

这段时间,随着功能需求的增加,项目代码越来越庞大了,编译出来的apk差不多有50M了,所以这就带来了一个问题,每一次编译的时间都特别长,期间也在网上找了好些方法,不过效果都不怎么显著。不过突然发现Freeline这个东西,感觉很不错的样子,所以就试了试,发现挺好用的,如果你修改的文件不是很多的话,增量编译大概几十秒就搞定了,确实非常的快。  这里就简单说下怎么集成freeline到我们的项目中1、准

2017-04-08 12:53:05 415

原创 自定义View入门

一、自定义View步骤在res/values/目录下新建attrs.xml文件,在该文件中定义和我们自定义View相关的属性。在构造函数中获取自定义的属性重写onMeasure()方法获测量自定义View的大小重写onDraw()方法绘制自定义View显示在界面上 二、下面一步一步的演示上面的步骤先上效果图:              1、自定义属性自定义属性时,declare-styl

2016-02-24 22:31:00 320

原创 View的事件分发机制分析

在自定义View中,如果想要你的View能够处理各种屏幕事件,那么事件的分发机制是你必须要知道的,它是事件处理中的重点也是难点,后面将会从源码的角度来分析android中的事件分发。  android的事件分发机制与3个方法密切相关:dispatchTouchEvent(MotionEvent event)、onInterceptTouchEvent(Motion Event event)和onTo

2016-02-24 22:22:07 263

空空如也

空空如也

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

TA关注的人

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