<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[engineer_zh的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/engineer_zh</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; engineer_zh]]></copyright><item><title><![CDATA[Java设计模式之观察者模式（Observer Pattern）]]></title><link>https://blog.csdn.net/engineer_zh/article/details/78857166</link><guid>https://blog.csdn.net/engineer_zh/article/details/78857166</guid><author>engineer_zh</author><pubDate>Wed, 20 Dec 2017 20:26:44 +0800</pubDate><description><![CDATA[观察者模式是Java23种设计模式中行为模式的一种。观察者模式定义了对象间的一种一对多的关系，使得每当一种对象改变状态，则所有依赖于它的对象都会得到通知并采用一种机制实现自动更新。观察者模式的被观察者对象即目标对象中保留了观察者的集合，当被观察者对象的状态发生变化时，会遍历观察者对象集合，然后通知观察者对象得到更新。下面上图：


 这张图非常简洁明了的说明了观察者模式当中各个角色的分工，下]]></description><category></category></item><item><title><![CDATA[Java设计模式之单例模式（Singleton Pattern）]]></title><link>https://blog.csdn.net/engineer_zh/article/details/78837099</link><guid>https://blog.csdn.net/engineer_zh/article/details/78837099</guid><author>engineer_zh</author><pubDate>Mon, 18 Dec 2017 20:55:22 +0800</pubDate><description><![CDATA[单例模式大家也许都不陌生，毕竟我们用的也比较的频繁，今天的这篇博客主要是想要弄清楚单例模式的几种写法以及单例模式的线程安全问题。
  废话不多说，直接看代码：
  1 饿汉模式：

/**
 * 
 * @author admin 单例模式中的饿汉模式
 *
 */
public class SingleTonHungry {
    // 1 私有化构造函数 让外界无法直接创建对象
	p]]></description><category></category></item><item><title><![CDATA[Java设计模式之适配器模式（Adapter Pattern）]]></title><link>https://blog.csdn.net/engineer_zh/article/details/78828417</link><guid>https://blog.csdn.net/engineer_zh/article/details/78828417</guid><author>engineer_zh</author><pubDate>Sun, 17 Dec 2017 22:06:16 +0800</pubDate><description><![CDATA[适配器模式是Java中的结构性模式的一种，最近详细的比较安卓中的Listview和RecycleView的区别，有一点很明显，就是RecycleView中就根本没有添加header和footer的方法，像这种方法也是我们平时常用的，那么只能自己封装了，参考了Listview的做法发现里面用到了适配器的模式就静下心来好好研究了下适配器模式。
 在阎宏博士的《JAVA与模式》一书中开头是这样描述适配]]></description><category></category></item><item><title><![CDATA[Java设计模式之工厂模式（Factory Pattern）]]></title><link>https://blog.csdn.net/engineer_zh/article/details/78824591</link><guid>https://blog.csdn.net/engineer_zh/article/details/78824591</guid><author>engineer_zh</author><pubDate>Sun, 17 Dec 2017 13:07:15 +0800</pubDate><description><![CDATA[工厂模式是什么？
  Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.即定义一个用于创建对象（这些对象有一个或者多个共同的特征]]></description><category></category></item><item><title><![CDATA[java设计模式之责任链模式(Chain of Resposibility Pattern)]]></title><link>https://blog.csdn.net/engineer_zh/article/details/78819705</link><guid>https://blog.csdn.net/engineer_zh/article/details/78819705</guid><author>engineer_zh</author><pubDate>Sat, 16 Dec 2017 14:19:08 +0800</pubDate><description><![CDATA[Java中的23中设计模式也许我们都知道但是理解的不是很深，每一种设计模式都有它存在的意义，需要我们去理解，今天就写下自己对责任链模式的理解。
   也许我们不会一个个去深入理解每一种设计模式，但是作为一名安卓开发，在自己安卓中用到的一些知识就是和Java中的知识点紧密相关的。为什么会记录下这篇文章呢？因为安卓中的事件分发机制大家再熟悉不过了的，其实事件分发机制就是Java中责任链模式的影子，所]]></description><category></category></item><item><title><![CDATA[n个人循环报数1-3问题]]></title><link>https://blog.csdn.net/engineer_zh/article/details/77884511</link><guid>https://blog.csdn.net/engineer_zh/article/details/77884511</guid><author>engineer_zh</author><pubDate>Thu, 07 Sep 2017 17:30:04 +0800</pubDate><description><![CDATA[最近看了下安卓相关的面试题，看到了一个n个人报数退出的问题就自己写了下，写完后有百度了下发现和别人的思路不一样就将自己的代码贴出来了。
  主要的思路见下图：
  


 我相信只要大家吧自己的思路理清楚了，代码实现就简单了。
 以下给出代码：
 public class Test {


	public static void main(String[] args) {
		int]]></description><category></category></item><item><title><![CDATA[Glide的整体理解相关的图解]]></title><link>https://blog.csdn.net/engineer_zh/article/details/77745686</link><guid>https://blog.csdn.net/engineer_zh/article/details/77745686</guid><author>engineer_zh</author><pubDate>Thu, 31 Aug 2017 14:39:31 +0800</pubDate><description><![CDATA[这两天在研究Glide图片的加载框架，将郭霖的几篇关于Glide的博客都看了一遍，过了一遍Glide的源码，自己对Glide也有了更加深刻的认识，下面自己也画了一张流程图，来加固自己的印象，即便以后忘记了，看着这张图也能迅速的回忆起来。
 先看一张整体的图：
     
  这张图比较大看起来不是特别的清晰，当然里面的总结也不是很详细和全面，如果Glide能用一张图就能整理清楚那就不是Gli]]></description><category></category></item><item><title><![CDATA[安卓Glide加载图片]]></title><link>https://blog.csdn.net/engineer_zh/article/details/77648212</link><guid>https://blog.csdn.net/engineer_zh/article/details/77648212</guid><author>engineer_zh</author><pubDate>Mon, 28 Aug 2017 14:15:12 +0800</pubDate><description><![CDATA[本文转载于郭霖的博客：http://blog.csdn.net/guolin_blog/article/details/53759439

现在Android上的图片加载框架非常成熟，从最早的老牌图片加载框架UniversalImageLoader，到后来Google推出的Volley，再到后来的新兴军Glide和Picasso，当然还有Facebook的Fresco。每一个都非常稳定，功能也都十分强大。但是它们的使用场景基本都是重合的，也就是说我们基本只需要选择其中一个来进行学习和使用就足够了，每一个框架]]></description><category></category></item><item><title><![CDATA[java关键字（final finally finalize）]]></title><link>https://blog.csdn.net/engineer_zh/article/details/76607058</link><guid>https://blog.csdn.net/engineer_zh/article/details/76607058</guid><author>engineer_zh</author><pubDate>Thu, 03 Aug 2017 09:54:21 +0800</pubDate><description><![CDATA[java中的final，finally，finalize，我想大家都很熟悉，具体怎么用，什么时候用到也是面试官常会问的一个问题，下面进行逐一讲解。
   1 final
    在Java中，final关键字可以用来修饰类、方法和变量（包括成员变量和局部变量）。
   1）final修饰类。
   当用final修饰一个类时，表明这个类不能被继承。也就是说，如果一个类你永远不会让他被继承，]]></description><category></category></item><item><title><![CDATA[java中的关键字一（this，super，static）]]></title><link>https://blog.csdn.net/engineer_zh/article/details/76477804</link><guid>https://blog.csdn.net/engineer_zh/article/details/76477804</guid><author>engineer_zh</author><pubDate>Tue, 01 Aug 2017 09:09:45 +0800</pubDate><description><![CDATA[这两天在家清理了下书架，发现原来一本学习java的书已经落满了灰尘，不有自主的擦干净翻开看了看，里面的知识熟悉又陌生，所有的知识自己都知道，但是很难讲的很透彻，因此决定这段时间将java中相关的知识写成博客，以便自己在遗忘的时候可以随时温习下。
    java中的关键字有很多，大约50多个，在这我不会一一去阐述，知识捡几个比较常用且重要的关键字进行说明。
   1 this
    在Ja]]></description><category></category></item><item><title><![CDATA[Activity的启动模式解决实际问题]]></title><link>https://blog.csdn.net/engineer_zh/article/details/75116573</link><guid>https://blog.csdn.net/engineer_zh/article/details/75116573</guid><author>engineer_zh</author><pubDate>Fri, 14 Jul 2017 15:51:59 +0800</pubDate><description><![CDATA[近段时间一直在忙于将eclipse的项目转到as上，哎，转项目真心是累，各种报错一点一滴的去解决，脑袋都大了。刚转完项目就接到新的任务，那就是用户登录app后，长时间不进app检测到token失效后跳登陆界面，就是这个小的功能引出了今天的博客。
   先给大家看一张效果图：
  
   大家看出问题没？在请求接口的时候后台返回的数据是用户的token已经失效了，那么前段要做的操作就是跳转到登]]></description><category></category></item><item><title><![CDATA[Android加载中动画AVLoadingIndicatorView的使用封装]]></title><link>https://blog.csdn.net/engineer_zh/article/details/73549993</link><guid>https://blog.csdn.net/engineer_zh/article/details/73549993</guid><author>engineer_zh</author><pubDate>Wed, 21 Jun 2017 15:57:05 +0800</pubDate><description><![CDATA[最近在逛Github的时候发现了一个安卓加载中的动画框架AVLoadingIndicatorView，这个框架非常的不错，里面集合了各种各样的加载框架，有很多的样式可以选择。种类虽然比较多，但不是我想要的样式，此篇文章主要讲的是在其基础上封装一个自己想要的样式。
   废话不多说，直接上图：

 本来就是站在巨人的肩膀上的，至于其具体的用法我就不详细阐述了，给上大家github的地址，大家可]]></description><category></category></item><item><title><![CDATA[AsyncHttpClient的数据请求使用的封装]]></title><link>https://blog.csdn.net/engineer_zh/article/details/72867625</link><guid>https://blog.csdn.net/engineer_zh/article/details/72867625</guid><author>engineer_zh</author><pubDate>Mon, 05 Jun 2017 15:16:37 +0800</pubDate><description><![CDATA[近期干了一件非常蛋疼的事情，就是在整个项目的数据请求中添加参数，实现起来倒是简单，但是项目中的涉及到的网络请求没有封装，导致要改的话就要所有的网络请求以及接口都是要改动的，真心是无语。没办法，当时刚接手这个项目的时候就想过要封装一个网络请求的框架，但是又觉得工作量太大，而且自己擅自改动后还要再走测试流程也就想想就放弃了。没想到到今天还是要动工，哎没办法只能加班加点。
     先给大家展现下原来]]></description><category></category></item><item><title><![CDATA[解决listview层层嵌套的另外一种思路(细节说明)]]></title><link>https://blog.csdn.net/engineer_zh/article/details/71519386</link><guid>https://blog.csdn.net/engineer_zh/article/details/71519386</guid><author>engineer_zh</author><pubDate>Wed, 10 May 2017 13:29:25 +0800</pubDate><description><![CDATA[上一篇提到用动态添加布局来解决listview的层层嵌套，由于这种做法我用到过很多次，所以做起来也很顺手，但是这一次的需求和上一次的稍微有点不同，导致最后快要提测的时候功能还没实现，当时就急了。。。。
   先给大家看下上次实现的效果:
   
 由于上一次的gif没有给大家展示横向的滑动，今天给补上。
但是现在我想问大家如果点击横向滑动的那几个小图片，会跳转到哪呢？
下面再给大家展示：]]></description><category></category></item><item><title><![CDATA[解决listview层层嵌套的另外一种思路]]></title><link>https://blog.csdn.net/engineer_zh/article/details/70837750</link><guid>https://blog.csdn.net/engineer_zh/article/details/70837750</guid><author>engineer_zh</author><pubDate>Thu, 27 Apr 2017 09:07:40 +0800</pubDate><description><![CDATA[最近项目涉及到订单的优化，比较忙没能及时更新博客，今天就吧自己在自己项目中遇到的listview嵌套的相关解决办法展现给大家。
    废话不多说，先给大家看下产品给的设计ui图：
   
   这是商品订单列表的一个效果图，下面我们来分析一下这个效果图，就会发现里面涉及到了层层的嵌套，来看下面一张图：
  
 上面的标志我想大家都能看懂，其实里里外外涉及到三层的嵌套。那我们来分析一下，]]></description><category></category></item><item><title><![CDATA[安卓属性动画的基本用法（二）]]></title><link>https://blog.csdn.net/engineer_zh/article/details/70171544</link><guid>https://blog.csdn.net/engineer_zh/article/details/70171544</guid><author>engineer_zh</author><pubDate>Fri, 14 Apr 2017 13:49:30 +0800</pubDate><description><![CDATA[上一篇给大家讲了属性动画中的ValueAnimator，如果大家细细的观察研究就会发现ValueAnimator的不足之处就是只能对数值对动画计算。假设一下如果我们要想对哪个控件操作，需要监听动画过程，在监听中对控件操作，如果用ValueAnimator来操作的话相比补间动画而言就相对比较麻烦和复杂。 那我们又想用属性动画又想实现这样的效果应该怎么做呢？这就引出了我们今天要讲的属性动画的另外一种O]]></description><category></category></item><item><title><![CDATA[安卓的属性动画基本用法（一）]]></title><link>https://blog.csdn.net/engineer_zh/article/details/69499559</link><guid>https://blog.csdn.net/engineer_zh/article/details/69499559</guid><author>engineer_zh</author><pubDate>Fri, 07 Apr 2017 09:07:57 +0800</pubDate><description><![CDATA[休假归来，十几天的婚假过得真快，时间不管对谁都是不够用的，我们能做的只能是珍惜时间。
    上篇文章讲解了补间动画，这次我们来看看属性动画，先给大家看看两张效果图，大家看看其中的不同：
    第一张（补间动画）：
    
   第二张（属性动画）：
   
  模拟器录制的第二张比较卡，但是大致的效果是能看出来的，大家也能一目了然的看出两张图的区别吧，那就是点击“飘逸的我”按钮的]]></description><category></category></item><item><title><![CDATA[安卓补间动画的详解]]></title><link>https://blog.csdn.net/engineer_zh/article/details/64924128</link><guid>https://blog.csdn.net/engineer_zh/article/details/64924128</guid><author>engineer_zh</author><pubDate>Wed, 22 Mar 2017 19:33:44 +0800</pubDate><description><![CDATA[夜深人静了，也许对大多数的程序员来说也只有在这个时候才是思维最活跃的时候吧，一杯咖啡一根烟，机械键盘放手边，程序员的标配。废话不多说，接着上篇写，下面来详细的介绍安卓的补间动画，让自己也让大家有个更加清楚地认识补间动画。
   上篇已经介绍过补间动画分4中： 1 alpha：透明度的变化；
                                                    ]]></description><category></category></item><item><title><![CDATA[安卓的基本的动画介绍]]></title><link>https://blog.csdn.net/engineer_zh/article/details/62037686</link><guid>https://blog.csdn.net/engineer_zh/article/details/62037686</guid><author>engineer_zh</author><pubDate>Tue, 14 Mar 2017 10:10:57 +0800</pubDate><description><![CDATA[我相信对于安卓开发者，在进行企业面试的时候总会被问到安卓动画的相关知识，在自己的项目开发中也或多或少用到相关的动画。每每开到别人的app里面的炫酷动画，我们总是在想，我那个x，这么炫酷，怎么实现的呢？其实道理很简单，万丈高楼平地起，不积跬步难千里，我相信只要一点一滴的去了解，熟悉，掌握这些动画的细节，那样你才能精通这些动画，相信日积月累，当你在用动画的时候就像打开一个Activity那样的简单。]]></description><category></category></item><item><title><![CDATA[安卓SharedPreference的详解及总结]]></title><link>https://blog.csdn.net/engineer_zh/article/details/60763404</link><guid>https://blog.csdn.net/engineer_zh/article/details/60763404</guid><author>engineer_zh</author><pubDate>Tue, 07 Mar 2017 14:21:36 +0800</pubDate><description><![CDATA[这段时间在做一个新的项目，大家都知道项目中必不可少的是数据的存储，今天想讲解的是轻量级的SharedPreference的存储，之所以想写这篇文章是因为在项目的开发过程中在进入app做的数据存储，退出app存储的数据就没了，我就瞬间懵逼，以为自己写的SharedPreference工具类有问题，就一直在断点，断点发现没问题又去看SharedPreference的源码，到最后还是没找到问题的所在....]]></description><category></category></item></channel></rss>