<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[金克丝的美好初衷]]></title><description><![CDATA[纸上得来终觉浅，绝知此事要躬行。]]></description><link>https://blog.youkuaiyun.com/aishang5wpj</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; aishang5wpj]]></copyright><item><title><![CDATA[OkHttp源码系列 之 RealInterceptorChain]]></title><link>https://blog.youkuaiyun.com/aishang5wpj/article/details/87978606</link><guid>https://blog.youkuaiyun.com/aishang5wpj/article/details/87978606</guid><author>aishang5wpj</author><pubDate>Wed, 27 Feb 2019 16:35:18 +0800</pubDate><description><![CDATA[源码出处
我们知道， OkHttp 中网络请求相关的逻辑都在 RealCall 类中，而 RealCall 类中最核心的方法是 getResponseWithInterceptorChain()，如下：
final class RealCall implements Call {
    
    ......
    
    Response getResponseWithIntercepto...]]></description><category></category></item><item><title><![CDATA[OkHttp 源码系列 之 ArrayDeque - 双端队列]]></title><link>https://blog.youkuaiyun.com/aishang5wpj/article/details/87978549</link><guid>https://blog.youkuaiyun.com/aishang5wpj/article/details/87978549</guid><author>aishang5wpj</author><pubDate>Wed, 27 Feb 2019 16:34:21 +0800</pubDate><description><![CDATA[源码出处
public final class Dispatcher {

  /** Ready async calls in the order they'll be run. */
  private final Deque&amp;lt;AsyncCall&amp;gt; readyAsyncCalls = new ArrayDeque&amp;lt;&amp;gt;();

  /** Running asynchro...]]></description><category></category></item><item><title><![CDATA[事件分发和NestedScrolling（二）]]></title><link>https://blog.youkuaiyun.com/aishang5wpj/article/details/78873343</link><guid>https://blog.youkuaiyun.com/aishang5wpj/article/details/78873343</guid><author>aishang5wpj</author><pubDate>Fri, 22 Dec 2017 14:57:45 +0800</pubDate><description><![CDATA[前言NestedScrolling是Android 5.0上一套全新的嵌套滑动机制，5.0及以上版本的所有View已经默认 
支持了这套机制，老的版本可以通过Support包进行向前兼容。它涉及的接口和类有下面四个：
主要接口：NestedScrollingChild、NestedScrollingParent
帮助类：NestedScrollingChildHelper、NestedScrolli]]></description><category></category></item><item><title><![CDATA[事件分发和NestedScrolling（一）]]></title><link>https://blog.youkuaiyun.com/aishang5wpj/article/details/78868996</link><guid>https://blog.youkuaiyun.com/aishang5wpj/article/details/78868996</guid><author>aishang5wpj</author><pubDate>Fri, 22 Dec 2017 00:17:15 +0800</pubDate><description><![CDATA[前言关于事件分发好像都已经说的很多了，网上也有很多资料，本来这篇文章主要是讲NestedScrolling(嵌套滚动)，但是因为它和事件分发的相关性较大，所以还是讲一下。事件分发的三个核心方法如下：1、dispatchTouchEvent()：分发事件
2、onInterceptTouchEvent()：决定父View是否拦截该事件不交由子View处理
3、onTouchEvent()：消费事件这三]]></description><category></category></item><item><title><![CDATA[EventBus源码分析]]></title><link>https://blog.youkuaiyun.com/aishang5wpj/article/details/71641882</link><guid>https://blog.youkuaiyun.com/aishang5wpj/article/details/71641882</guid><author>aishang5wpj</author><pubDate>Thu, 11 May 2017 16:52:58 +0800</pubDate><description><![CDATA[前言这可能是东半球来的最晚的EventBus分析文章了。有多久没有写博客了？三个月？半年？想不清了，每天忙着做业务很少有自己的时间来总结和记录，感觉自己也变懒了，以前每天工作效率还是挺高的，现在已经不行了。这两天空闲了些，但是学习不能停止呀，想想很多系统和三方库的源码都没有好好阅读和总结过，网上有很多分析的文章，但毕竟都别人写的。纸上得来终觉浅，绝知此事要躬行。看别人写的虽然也看得懂但是也很容易忘，]]></description><category></category></item><item><title><![CDATA[简单但是强大的阻尼滚动ViewGroup]]></title><link>https://blog.youkuaiyun.com/aishang5wpj/article/details/54291616</link><guid>https://blog.youkuaiyun.com/aishang5wpj/article/details/54291616</guid><author>aishang5wpj</author><pubDate>Mon, 09 Jan 2017 18:33:55 +0800</pubDate><description><![CDATA[1、这是一个可以给你的UI添加阻尼效果的自定义ViewGroup，支持包括但不限于以下控件：

普通View
ViewPager
ScrollView
HorizontalScrollView
RecyclerView
等等
2、可以自定义阻力大小以及阻尼方向]]></description><category></category></item><item><title><![CDATA[自定义ViewGroup实现侧滑删除菜单]]></title><link>https://blog.youkuaiyun.com/aishang5wpj/article/details/54093911</link><guid>https://blog.youkuaiyun.com/aishang5wpj/article/details/54093911</guid><author>aishang5wpj</author><pubDate>Thu, 05 Jan 2017 15:50:53 +0800</pubDate><description><![CDATA[最近的这段时间真是忙到飞起，各种需求各种bug，心好累。

这个侧滑删除的自定义ViewGroup本来在11月份的时候就开始写的，中间一直放在那没动，这两天正好空下来，赶紧抽时间把这个项目写完了，事情也算是有个了结，不然总放在心里搁着，闷得慌，而且今天刚好是2017年1月5号，发工资的日子，而且元旦也刚过不久，好事成双，就当是送给自己的礼物了。]]></description><category></category></item><item><title><![CDATA[仿微博富文本编辑框]]></title><link>https://blog.youkuaiyun.com/aishang5wpj/article/details/53065915</link><guid>https://blog.youkuaiyun.com/aishang5wpj/article/details/53065915</guid><author>aishang5wpj</author><pubDate>Mon, 07 Nov 2016 14:17:48 +0800</pubDate><description><![CDATA[没图我说个毛？https://github.com/aishang5wpj/RichEditText/raw/master/screenshot/screenshot.gif’ height=’480px’/>首先要说明的是：不管是话题、at还是poi，都应该被看成一个最小子项，即不可在中间插入文字，也不可对话题、at或者poi中的任何文字进行单独的修改或者删除。结合以上，该富文本编辑框的主要功能如]]></description><category></category></item><item><title><![CDATA[Android源码阅读笔记(1)----Fragment]]></title><link>https://blog.youkuaiyun.com/aishang5wpj/article/details/52182972</link><guid>https://blog.youkuaiyun.com/aishang5wpj/article/details/52182972</guid><author>aishang5wpj</author><pubDate>Fri, 12 Aug 2016 22:41:50 +0800</pubDate><description><![CDATA[前言今天是加入小红书的第一个月，工作已经慢慢步入正轨了，除了工作时间稍微有点长以外还是挺喜欢这里的，不过作为即使下了班也没人约的单身狗，想想也觉得无所谓了。这算是自我安慰吗，哈哈哈~老大说以后Android Team一周内要分享两次知识，让我们自己下去准备，每个人都要分享自己的知识。我觉得这点蛮好的，每个人做开发都有自己的经验和技巧，虽然现在很多东西网上都有，不过如果能面对面的分享出来，互相交流学习]]></description><category></category></item><item><title><![CDATA[Fragment重叠问题]]></title><link>https://blog.youkuaiyun.com/aishang5wpj/article/details/51773713</link><guid>https://blog.youkuaiyun.com/aishang5wpj/article/details/51773713</guid><author>aishang5wpj</author><pubDate>Tue, 28 Jun 2016 09:58:27 +0800</pubDate><description><![CDATA[使用replace来添加Fragment，replace的作用相当于是remove() + add() 组合后的作用。即使用replace会先移除掉当前id为content上的Fragment，这个被移除掉的Fragment就会被销毁掉（如果当前事务），然后通过add再把新的Fragment添加到View上。
  （1）使用replace方式，相当于在对应id为content的FrameLayout]]></description><category></category></item><item><title><![CDATA[泛型模式下的Retrofit + rxJava实现三级缓存]]></title><link>https://blog.youkuaiyun.com/aishang5wpj/article/details/51692824</link><guid>https://blog.youkuaiyun.com/aishang5wpj/article/details/51692824</guid><author>aishang5wpj</author><pubDate>Thu, 16 Jun 2016 16:27:46 +0800</pubDate><description><![CDATA[Retrofit + rxJava实现三级缓存前言平时加载数据的时候，大多都用到缓存，即取数据的顺序为：内存->硬盘->网络。rxJava实现三级缓存的需求主要用到两个操作符：concat和first.concatconcat同名的方法有很多，由于是实现三级缓存，所以这里使用的是3个参数的concat。先来看官方说明：
  Returns an Observable that emits the i]]></description><category></category></item><item><title><![CDATA[WeakReference 在android中的应用]]></title><link>https://blog.youkuaiyun.com/aishang5wpj/article/details/51594091</link><guid>https://blog.youkuaiyun.com/aishang5wpj/article/details/51594091</guid><author>aishang5wpj</author><pubDate>Mon, 06 Jun 2016 11:11:13 +0800</pubDate><description><![CDATA[首先我们来看一段代码public class AutoActivity extends Activity {    Handler handler = new Handler(){
        public void handleMessage(android.os.Message msg) {        };
    };
    @Override
    protected void]]></description><category></category></item><item><title><![CDATA[RxJava入门学习笔记]]></title><link>https://blog.youkuaiyun.com/aishang5wpj/article/details/51580641</link><guid>https://blog.youkuaiyun.com/aishang5wpj/article/details/51580641</guid><author>aishang5wpj</author><pubDate>Fri, 03 Jun 2016 17:35:01 +0800</pubDate><description><![CDATA[前言现在rx系列似乎是火的不行了，一打开群就是各种rxJava、rxAndroid。最近正恶补各种新技术来充实自己，所以前些天写完两篇介绍JuheNews项目的文章之后，马上又开始加入了学习rxJava的阵营当中。欢迎来到rxJava刚开始看rxJava的系列文章的时候，一万头草泥马在心里来回奔腾：这tm跟屎一样的东西写的都是个啥？现在开始找到了一点感觉了。网上很多大神都把rxJava看成设计模式中]]></description><category></category></item><item><title><![CDATA[JuheNews系列之二 · ToolBar+AppBarLayout+CoordinatorLayout+CollapsingToolbarLayout]]></title><link>https://blog.youkuaiyun.com/aishang5wpj/article/details/51508867</link><guid>https://blog.youkuaiyun.com/aishang5wpj/article/details/51508867</guid><author>aishang5wpj</author><pubDate>Fri, 27 May 2016 16:14:37 +0800</pubDate><description><![CDATA[JuheNews系列之二 · ToolBar+AppBarLayout+CoordinatorLayout+CollapsingToolbarLayoutAndroid5.0重要的改变之一，除了Material Design风格的设计思想，应该就是沉浸式状态栏了吧。之前实现沉浸式的效果时，都是借助SystemBarTint来实现，或许以后你也可以丢弃这种方式了。除此之外，由于actionbar不够灵]]></description><category></category></item><item><title><![CDATA[JuheNews系列之一 · 前言]]></title><link>https://blog.youkuaiyun.com/aishang5wpj/article/details/51507059</link><guid>https://blog.youkuaiyun.com/aishang5wpj/article/details/51507059</guid><author>aishang5wpj</author><pubDate>Thu, 26 May 2016 14:30:13 +0800</pubDate><description><![CDATA[JuheNews系列之一 · 前言做安卓两年多，技术日新月异，虽然每天都在敲代码，但是感觉其实一直都是用的5.0及以前的那些控件、特效、风格。今天是2016年5月26日，Android N发布已经一周了，什么Material Design，什么mvp、mvvm、data binding，之前统统都没用过，回头想想，觉得作为一个安卓程序员真是失败啊。前段时间研究MVP模式时，发现了一个不错的项目Sim]]></description><category></category></item><item><title><![CDATA[android sdk 源码解析]]></title><link>https://blog.youkuaiyun.com/aishang5wpj/article/details/51405531</link><guid>https://blog.youkuaiyun.com/aishang5wpj/article/details/51405531</guid><author>aishang5wpj</author><pubDate>Sat, 14 May 2016 13:44:49 +0800</pubDate><description><![CDATA[android sdk 源码解析
  旨在帮助Android开发者更好的学习Android！我们只是一群普通的程序员，但是，我们热爱分享，想热热闹闹的玩点有意义的事！如果你也想陪我们一起愉快的玩耍，欢迎加入我们！Issues认领分析文章！]]></description><category></category></item><item><title><![CDATA[Android MVP实战]]></title><link>https://blog.youkuaiyun.com/aishang5wpj/article/details/51384371</link><guid>https://blog.youkuaiyun.com/aishang5wpj/article/details/51384371</guid><author>aishang5wpj</author><pubDate>Thu, 12 May 2016 15:19:45 +0800</pubDate><description><![CDATA[前言前些天，在公司实习的测试妹纸回学校答辩了，要我给她做个毕业设计，说要求不高，看看界面就行。七搞八搞给做了个，但是项目一开始并不是用mvp写的，因为那时感觉对mvp的理解还不是很深刻。前两天有空，就把它改成了mvp风格的样子，所以也就有了这篇博客。网上也有很多文章跟demo，初看时始终不得其解，后来在将那个项目改成mvp的过程中才开始有了拨云见月的感觉，这篇博客也将尽可能用通俗易懂的语言来帮助更多]]></description><category></category></item><item><title><![CDATA[简单的测量工具实现]]></title><link>https://blog.youkuaiyun.com/aishang5wpj/article/details/51276520</link><guid>https://blog.youkuaiyun.com/aishang5wpj/article/details/51276520</guid><author>aishang5wpj</author><pubDate>Thu, 28 Apr 2016 17:55:58 +0800</pubDate><description><![CDATA[先来看看魅族上面自带的一个工具效果。]]></description><category></category></item><item><title><![CDATA[MVC、MVP、MVVM、Data Binding]]></title><link>https://blog.youkuaiyun.com/aishang5wpj/article/details/51187800</link><guid>https://blog.youkuaiyun.com/aishang5wpj/article/details/51187800</guid><author>aishang5wpj</author><pubDate>Tue, 19 Apr 2016 09:56:21 +0800</pubDate><description><![CDATA[转自阮一峰的网络日志
  复杂的软件必须有清晰合理的架构，否则无法开发和维护。 
  MVC（Model-View-Controller）是最常见的软件架构之一，业界有着广泛应用。它本身很容易理解，但是要讲清楚，它与衍生的 MVP 和 MVVM 架构的区别就不容易了。
昨天晚上，我读了《Scaling Isomorphic Javascript Code》，突然意识到，它们的区别非常简单。我用几段话]]></description><category></category></item><item><title><![CDATA[访问assets中文件各种文件的方法]]></title><link>https://blog.youkuaiyun.com/aishang5wpj/article/details/50965510</link><guid>https://blog.youkuaiyun.com/aishang5wpj/article/details/50965510</guid><author>aishang5wpj</author><pubDate>Wed, 23 Mar 2016 18:26:12 +0800</pubDate><description><![CDATA[可以通过这个方法来找到是否有你要的那个文件：String[] list = null;
list = getResources().getAssets().list("abc");它返回的是在assets文件夹下abc文件夹中文件的文件名的列表。再去检查list中是否有你需要的文件。读取abc文件夹中的文件的时候只需:InputStream in = getResources().getAssets]]></description><category></category></item></channel></rss>