- 博客(12)
- 资源 (6)
- 收藏
- 关注
原创 Picasso源码分析(六):BitmapHunter与请求结果的处理
into方法流程回顾into方法首先检查了是否在主线程,控件是否为null,用户有没有设置uri或者资源id,是否调用了fit方法自适应压缩。接着根据into方法调用时间创建Request请求,并为该请求设置缓存用的key。接着判断是否要读内存缓存,可以读内存缓存并且命中的话就将缓存中的图片显示在控件然后返回,否则开启网络请求。网络请求的过程中暂时显示占位图。 网络请求的过程就是针对此次请求封装成
2016-06-22 16:30:48 1737 1
原创 Picasso源码分析(五):into方法追本溯源和责任链模式创建BitmapHunter
Picasso异步加载图片流程回顾首先通过with方法创建单例Picasso对象 public static Picasso with(Context context) { if (singleton == null) { synchronized (Picasso.class) { if (singleton == null) { sing
2016-06-21 16:58:14 4746 1
原创 java中异常处理finally和return语句的执行顺序
finally代码块的语句在return之前一定会得到执行如果try块中有return语句,finally代码块没有return语句,那么try块中的return语句在返回之前会先将要返回的值保存,之后执行finally代码块,最后将保存的返回值返回,finally代码块虽然对返回值进行修改也不影响返回值,因为要返回的值在执行finally代码块之前已经保存了,最终返回的是保存的旧值。如果try
2016-06-14 19:36:12 3927
原创 Picasso源码分析(四):不变模式、建造者模式和Request的预处理
Request的不变模式(Immutable Pattern) 不变模式可增强对象的强壮型,允许多个对象共享某一个对象,降低了对该对象进行并发访问时的同步化开销。如果需要修改一个不变对象的状态,那么就需要建立一个新的同类型对象,并在创建时将这个新的状态存储在新对象里。 不变模式只涉及到一个类。一个类的内部状态创建后,在整个生命周期都不会发生变化时,这样的类称作不变类。 不变模式的优点:
2016-06-14 17:06:55 2131
原创 Picasso源码分析(三):快照功能实现和HandlerThread的使用
HandlerThread原理和用法HandlerThread是一个Android系统提供的提供快速开发的工具类,功能为开启一个具有looper的线程,该线程的looper可以和handler绑定,也就是说创建handler的时候可以在handler构造函数传入handlerThread对象的looper,这样此handler的消息处理 方法handleMessage就会在handlerThread
2016-06-13 10:35:45 1424 1
原创 Picasso源码分析(二):默认的下载器、缓存、线程池和转换器
下载器当用户没有为Picasso指定下载器的时候Picasso会通过Utils.createDefaultDownloader(context)方法创建一个默认的下载器 static Downloader createDefaultDownloader(Context context) { try { Class.forName("com.squareup.okhttp.OkH
2016-06-12 22:45:55 4597
原创 Picasso源码分析(一):单例模式、建造者模式、面向接口编程
Picasso简单介绍Picasso使用建造者设计模式,使异步网络加载图片到控件这一复杂流程可以用一条方法链搞定。典型的Picasso加载图片的使用方式如下:Picasso.with(context).load(url).into(imageView); 传入上下文context构造获取Picasso然后异步加载图片链接获取图片最后显示在控件上,一气呵成 或者可以对加载到的图片进行尺寸压缩后再显示
2016-06-12 17:06:07 1925
原创 jdk源码分析之WeakHashMap
基本原理WeakHashMap特点是,当除了自身有对key的引用外,此key没有其他引用,那么WeakHashMap会在下次对WeakHashMap进行增删改查操作时及时丢弃该键值对,节约内存使用,此特性使得WeakHashMap非常适合构建缓存系统。 WeakHashMap是主要通过expungeStaleEntries函数的来实现移除其内部不用的entry从而达到的自动释放内存的目的。基本上只
2016-06-08 10:39:33 1573
原创 jdk源码分析之PriorityQueue
基本原理PriorityQueue(优先级队列)的数据结构是最小堆,采用数组作为底层数据结构。 不同于普通的遵循FIFO规则的队列,PriorityQueue每次都选出优先级最高的元素出队,优先队列里实际是维护最小堆,通过最小堆使得每次取出的元素总是优先级最高的。 /** * Priority queue represented as a balanced binary heap:
2016-06-07 16:36:44 794
原创 Volley源码分析【面向接口编程的典范】
基本原理Volley采用生产者消费者模型,生产者(Volley的使用者)通过调用add方法给请求队列添加请求,缓存调度器和网络调度器作为消费者从请求队列取出请求处理,根据不同情况决定走缓存还是走网络请求数据,最后切换线程,将请求的数据回调给UI线程。创建请求队列Volley通过静态工厂方法newRequestQueue生成一个请求队列RequestQueue public static Req
2016-06-03 16:28:08 4010
原创 jdk源码分析之LinkedHashMap
基本原理LinkedHashMap继承自HashMap,因此具有HashMap的所有特性。在HashMap的基础上,保持了key的插入顺序或者访问顺序。实现方法就是用双向循环链表将所有的entry链接起来,读取数据的时候直接读取此双向循环链表的数据即可。public class LinkedHashMap<K,V> extends HashMap<K,V> implements Map<K,V>
2016-06-02 11:11:06 847 1
原创 jdk源码分析之ConcurrentHashMap
基本原理Hashtable使用synchronized锁住整张Hash表,锁的粒度太大导致Hashtable性能低下。ConcurrentHashMap允许多个修改操作并发进行,其关键在于使用了锁分离技术。它使用了多个锁来控制对hash表的不同部分进行的修改。ConcurrentHashMap内部使用段(Segment)来表示这些不同的部分,每个段其实就是一个小的hash table,它们有自己的锁
2016-06-01 22:30:22 3315
如何成功运行Apache Mahout的Taste Webapp-Mahout推荐教程-Maven3.0.5-JDK1.6-Mahout0.5
2016-11-23
安卓二维码生成与扫描完美解决方案
2016-03-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人