快速排序算法

简介

快速排序(Quick Sort)是由图灵奖获得者Tony Hoare设计出来,被列为20世纪十大算法之一,以“快速”命名表明该算法在整体性能上是排序算法的王者。
核心思想是:通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。一趟排序过程示意图如下。

Retrofit2组件分析

1. 简介

Retrofit2是由Square公司开源的HTTP网络请求框架的封装,最近阅读v2.4.0源码,在此记录一下。
官方使用的Demo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public interface GitHubService {
@GET("users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
}
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.build();

GitHubService service = retrofit.create(GitHubService.class);
Call<List<Repo>> repos = service.listRepos("octocat");
// SYNCHRONOUS
repos.execute()
// ASYNCHRONOUS
repos.enqueue(...)

okhttp组件学习

简介

OkHttp是一个HTTP客户端组件,要求Android2.3以上或者JDK1.7以上,最近重新读其源码,对感兴趣的部分记录一下.

网络请求队列 Dispatcher

  • Call#execute()同步请求前会进入Dispacher#runningSyncCalls队列,完成后remove

  • Call#enqueue()异步请求会进入Dispatchder#runningAsyncCalls队列,这里有限制条件:maxRequests<=64 && maxRequestsPerHost<=5,不满足则放入Dispatcher#readyAsyncCalls,这些值可通过#setMaxRequests()#setMaxRequestsPerHost()设置.

  • 异步执行的线程池默认设置为:

CorePoolSize MaximumPoolSize KeepAliveTime WorkQueue
0 Integer.MAX_VALUE 60s SynchronousQueue
  • Dispatcher#setIdleCallback()用于设置在同步请求队列和异步请求队列均为空时执行一次callback

设计模式笔记

面向对象六大原则

  1. Single Responsibility Principle
  2. Open Close Principle
  3. Liskov Substitution Principle
  4. Dependence Inversion Principle
  5. Interface Segregation Principle
  6. Law of Demeter

《设计模式:可复用面向对象软件的基础》23种设计模式:

创建型模式

单例模式(Singleton)

greenDAO组件分析

简介

greenDAO是一个开源的针对Android SQLite数据库的ORM组件,根据官方信息,其主要特点有性能好,包小(<100KB)等,本文主要分析greenDAO设计原理和思想,为今后我们自己使用和开发ORM组件提供指导。

建模

ORM组件可以使我们摆脱枯燥的各种SQL操作,使我们专心于对象操作。第一步就是如何进行建模,假设我们需要创建如下数据库:

按照greenDAO规范,我们需要根据数据库schema创建如下两个实体类:

学习Okio的优化思想

简介

Okio是由Square公司开发并开源的java IO组件库,最初用于其开发的HTTP客户端OkHttp的底层IO封装,从Android 4.4起,HttpURLConnection底层实现采用Okhttp,Okio组件也被开发者所认可。根据GitHub介绍,该组件定位是:

Okio is a new library that complements java.io and java.nio to make it much easier to access, store, and process your data.

我们主要是通过源码分析学习其优化的思想。

Okio简单demo

1
2
3
4
5
6
7
8
9
10
// inputStream  : 输入
// outputStream : 输出
try (BufferedSource source = Okio.buffer(Okio.source(inputStream));
BufferedSink sink = Okio.buffer(HashingSink.md5(Okio.sink(outputStream)))
) {
sink.writeAll(source);
sink.flush();
} catch (IOException e) {
e.printStackTrace();
}

Android Studio 常用插件

整理使用Android Studio进行开发时所使用的插件,如发现更好用的插件会及时更新。

1. GsonFormat
快速将json字符串转换成一个JavaBean.

2. Android Code Generator
根据布局文件快速生成对应的Activity,Fragment,Adapter,Menu.

3. Android Parcelable code generator
JavaBean快速实现Parcelable接口.

4. Android Methods Count
显示依赖库的方法数.