- 博客(25)
- 收藏
- 关注
原创 CountDownLatch源码浅析
目录成员变量构造方法线程等待countDown方法getCount方法CountDownLatch允许一个或多个线程等待其他线程完成操作,基于对共享锁的获取来实现,获取到共享锁,说明线程不再需要等待,未获取到,说明线程仍然需要等待。成员变量 private final Sync sync; // 用来实现功能的基础组件,继承AQS,Sync是CountDow...
2018-10-26 12:29:07
436
原创 CyclicBarrier源码浅析
目录简述成员变量等待解除阻塞重置获取当前阻塞的线程个数简述阻塞多个线程,直到阻塞的线程个数达到一定条件,则唤醒所有阻塞的线程,并由唤醒的线程执行任务。 成员变量 // 用于线程安全的锁 private final ReentrantLock lock = new ReentrantLock(); // 等待条件 private...
2018-10-23 18:29:39
359
原创 Retrofit源码浅析
目录创建Retrofit创建代理类创建ServiceMethod解析注解创建CallAdapter创建Converter创建Call请求创建OkHttpCall对象ServiceMethod的adapt方法执行网络请求构建网络请求解析响应创建RetrofitRetrofit.Builder有以下几个成员变量,通过链式可以设置Builder的成...
2018-10-15 22:05:56
434
原创 otto 源码浅析
目录otto简单使用说明Bus的构造方法Bus的register方法findAllProducersdispatchProducerResultToHandlerfindAllSubscribersBus的post方法Bus的unregister方法otto简单使用说明单例创建Bus类register用于注册,unregister用于取消注册post...
2018-10-11 20:39:40
403
原创 PriorityBlockingQueue简述
一个支持优先级排序的无界阻塞队列 PriorityBlockingQueue可以理解成是对PriorityQueue加上了Lock功能,所以不再分析具体源码。
2018-10-04 17:13:05
394
原创 LinkedBlockingQueue源码浅析
一个由链表结构组成的有界阻塞队列 成员变量 // 允许的最大容量 private final int capacity; // 当前节点个数,因为有两个锁,所以节点个数采用原子类 private final AtomicInteger count = new AtomicInteger(); // 链表的头节点 transient N...
2018-10-04 17:12:30
259
原创 ArrayBlockingQueue源码浅析
一个由数组结构组成的有界阻塞队列 构造方法 public ArrayBlockingQueue(int capacity) { this(capacity, false); } // 初始化数组,实例化ReentrantLock和两个等待队列notEmpty、notFull public ArrayBlockingQueue(int c...
2018-10-04 17:07:36
466
原创 Hashtable源码浅析
Hashtable是并发安全的hash表,结构是数组+链表。 put // 添加 key value public synchronized V put(K key, V value) { // Make sure the value is not null if (value == null) { throw n...
2018-10-04 12:21:41
261
原创 PriorityQueue源码浅析
优先级队列,基于数组的树形结构。 添加元素 // 添加元素 public boolean add(E e) { return offer(e); } // 添加元素 public boolean offer(E e) { if (e == null) throw new NullPoint...
2018-10-04 12:17:27
219
原创 LinkedList源码浅析
节点Node:静态内部类 // 节点类,有值、前驱、后继 private static class Node<E> { E item; Node<E> next; Node<E> prev; Node(Node<E> prev, E element, Node<...
2018-10-04 12:09:58
199
原创 Vector与Stack简述
Vector:线程安全,默认容量为10,容量增长量默认为0,每次进行扩容是旧的容量乘以2。支持null的添加。基于数组实现。 Stack:Stack继承Vector的栈结构。...
2018-10-04 11:54:04
776
原创 ArrayList源码浅析
动态数组的列表 添加元素 // 增加一个元素 public boolean add(E e) { // 确保数组容量足够 ensureCapacityInternal(size + 1); // Increments modCount!! // 增加元素 elementData[size++] = e; ret...
2018-10-04 11:49:50
259
转载 java.net.UnknownHostException异常
http://www.cnblogs.com/rockdean/articles/2439030.html太诡异了,这个诡异的问题让我不幸的碰到又不幸浪费了很多时间去找问题。nnd第一种: java.net.UnknownHostException: Host is unresolved ***.****.*** 80你若是确定你的网络权限在配置文件中写好,也确定自己的网络是好
2017-08-19 13:27:12
7900
原创 使用Gson解析报错
在使用Gson时解析报错:com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT大意为解析时期待的是一个JSONArray,而实际是一个JSONObject,说明服务器端给的json数据实质是一个JSONObject
2017-08-19 01:20:34
906
转载 chrome jsonView插件安装
http://www.cnblogs.com/cssfirefly/p/4368020.htmlchrome 应用商店打不开,想装插件愁死人了。今天想到一个好方法,以 jsonView插件为例分享一下。1、打开 https://github.com ;2、搜索 jsonView 链接:https://github.com/search?utf8=%E2%9C%9
2017-08-17 20:55:25
459
原创 【Android 数据业务解析】nwTypeChanged引发的原因
本文主要分析由于nwTypeChanged引发的数据连接流程。在DcTracker的handleMessage方法中,会由于nwTypeChanged原因来使得手机去尝试建立数据连接,调用setupDataOnConnectableApns方法。// 当DcTracker接收到EVENT_DATA_RAT_CHANGED的消息时,会尝试建立数据连接,建立连接的原因是nwTypeCh
2017-07-23 13:17:51
1027
原创 Dialog的不完全事件分发机制
说是不完全,一是觉得自己语言表述不完美,二是觉得没有方方面面都分析到。 首先我们知道以下知识: setCancelable(false); dialog弹出后会点击屏幕或物理返回键,dialog不消失 setCanceledOnTouchOutside(false); dialog弹出后点击屏幕,dialog不消失,点击物理返回
2017-07-17 23:11:12
1704
原创 【Android 数据业务解析】PreferredApn修改的源码分析
DcTracker中需要去获取preferredapn的id以及修改preferredapn的id,涉及到两个方法的使用,如下:getPreferredApn方法// 得到preferredapn的方法private ApnSetting getPreferredApn() { if (mAllApnSettings == null || mAllApnSettings.
2017-07-16 12:23:40
2722
原创 UriMatcher使用原理的源码分析
1 构造方法分析首先构造一个UriMatcher对象A,构造方法如下:public static final int NO_MATCH = -1;/** * Creates the root node of the URI tree. * * @param code the code to match for the root URI */// 构造方法publi
2017-07-09 13:44:05
906
原创 【Android 数据业务解析】APN参数创建
手机可以上网,首先要建立数据连接,建立数据连接之前需要有apn才可以,所以本节先研究APN参数的创建过程。在DcTracker.java中,创建APN的起点方法为createAllApnList方法。DcTracker的createAllApnList方法:/** * Based on the sim operator numeric, create a list f
2017-07-08 18:27:11
4273
原创 Activity中使用Dialog的方式
1.Activity中Dialog的使用方法 Activity提供了一套Dialog的管理机制,涉及到以下方法。onCreateDialog: 创建dialog(需要重写)onPrepareDialog: 在创建dialog后的其他准备工作(需要重写)showDialog: 显示dialog(直接调用)dismissDialog: 取消dial
2017-06-25 20:41:09
2238
原创 findViewById方法探究
配置布局的xml文件时,有时会给View配置id,而在Activity中寻找到该View的方法就是通过该id号来找到该View的。具体调用的方法就是findViewById。
2017-06-25 17:11:48
18570
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人