<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[hmh0512的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/hmh0512</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; hmh0512]]></copyright><item><title><![CDATA[适应RxJava2思维习惯]]></title><link>https://blog.youkuaiyun.com/hmh0512/article/details/103515769</link><guid>https://blog.youkuaiyun.com/hmh0512/article/details/103515769</guid><author>hmh0512</author><pubDate>Thu, 12 Dec 2019 20:33:20 +0800</pubDate><description><![CDATA[RxJava有几个重要关键字，即函数响应式编程，观察者模式，事件发射，消费等等。以下这段话摘自其他文章Android 响应式编程 RxJava2 完全解析。鸣谢作者。

响应式编程的组成为Observable/Operator/Subscriber，RxJava在响应式编程中的基本流程如下：
这个流程，可以简单的理解为：Observable -&gt; Operator1 -&gt; Operat...]]></description><category></category></item><item><title><![CDATA[Android的非Google官方衍生品]]></title><link>https://blog.youkuaiyun.com/hmh0512/article/details/90707849</link><guid>https://blog.youkuaiyun.com/hmh0512/article/details/90707849</guid><author>hmh0512</author><pubDate>Thu, 30 May 2019 22:50:03 +0800</pubDate><description><![CDATA[Android的非Google官方衍生品什么是Android的Google官方衍生品Android WearAndroid AutoAndroid TVAndroid的非Google官方衍生品亚马逊FireOS不带上层UI的Android国内外手机厂商ROM第三方ROMAndroid非Google官方衍生品定制的内容
什么是Android的Google官方衍生品
所谓Android的衍生品即原生A...]]></description><category></category></item><item><title><![CDATA[深入浅出Java四种引用]]></title><link>https://blog.youkuaiyun.com/hmh0512/article/details/80817301</link><guid>https://blog.youkuaiyun.com/hmh0512/article/details/80817301</guid><author>hmh0512</author><pubDate>Tue, 26 Jun 2018 18:05:02 +0800</pubDate><description><![CDATA[深入浅出Java四种引用（未完）

　　Java的四种引用已是老生常谈了，一般由内存泄露的解决办法引出。然而真正理解其背后的设计原理，并灵活应用它们不是一件容易的事。以下是四种引用的基本概念，但如果你以为这是一篇 “概念解释+使用场景+示例代码”的三段式技术帖，花2分钟浏览和1分钟复制粘贴修改就可以get到新技能，那么你可能要失望了。因为我希望用人话将Java的四种引用阐述清楚，使人一旦理解，就不...]]></description><category></category></item><item><title><![CDATA[Builder模式演义(2)——OkHttp源码中的Builder模式]]></title><link>https://blog.youkuaiyun.com/hmh0512/article/details/62614500</link><guid>https://blog.youkuaiyun.com/hmh0512/article/details/62614500</guid><author>hmh0512</author><pubDate>Fri, 17 Mar 2017 02:10:52 +0800</pubDate><description><![CDATA[引言　　在上一篇Builder模式演义(1)中介绍了Builder模式的标准形式，以及两种基本变换——链式调用和省略指挥者角色。本文将通过分析OkHttp源码阐述Builder模式的另外两种变换——省略抽象Builder角色和Product角色回炉再造。OkHttp源码中的Builder模式　　OkHttp作为开源的Android网络请求框架，以URLConnection和HttpClient的替代]]></description><category></category></item><item><title><![CDATA[Builder模式演义]]></title><link>https://blog.youkuaiyun.com/hmh0512/article/details/62110806</link><guid>https://blog.youkuaiyun.com/hmh0512/article/details/62110806</guid><author>hmh0512</author><pubDate>Wed, 15 Mar 2017 00:20:58 +0800</pubDate><description><![CDATA[引言　　不用怀疑，你一定遇到和使用过它，它在Android源码和各种开源组件中是如此常见。这是一种你可以不知道怎么运用，但是知道了会欲罢不能的设计模式。定义　　Builder模式（建造者模式，有人称作生成器模式），将一个复杂对象的构建与他的表示分离，使得同样的构建过程可以创建不同的表示。 
　　很抽象？请看如下UML类图，进行直观的描述。UML类图　　这是在许多书籍、网络资料中非常容易找到的标准Bu]]></description><category></category></item><item><title><![CDATA[Android面试遇到的问题(2)]]></title><link>https://blog.youkuaiyun.com/hmh0512/article/details/60638349</link><guid>https://blog.youkuaiyun.com/hmh0512/article/details/60638349</guid><author>hmh0512</author><pubDate>Tue, 07 Mar 2017 00:19:49 +0800</pubDate><description><![CDATA[Android有哪几种Window类型？
单例模式中的内部静态类方式为什么可以保证实例唯一？提示：类加载机制双亲委派
SQLite使用中要注意什么？
AMS了解过吗？
是否使用过RxJava和EventBus？如何自己消息传递的解耦？
AIDL的原理是什么？
线程池使用多吗？]]></description><category></category></item><item><title><![CDATA[Java 内存从分配到泄露]]></title><link>https://blog.youkuaiyun.com/hmh0512/article/details/57426208</link><guid>https://blog.youkuaiyun.com/hmh0512/article/details/57426208</guid><author>hmh0512</author><pubDate>Sun, 26 Feb 2017 19:03:04 +0800</pubDate><description><![CDATA[Java内存划分为栈、堆、方法区等区域，其中栈保存的是方法的局部变量，随方法起随方法灭，不需要GC；堆保存所有对象的实例和数组，是GC和泄露的重点区；方法区保存的是类信息、常量、静态变量等静态信息，也需要GC。
　　堆内存的回收中，判断对象存活的算法有引用计数算法和可达性分析算法，引用计数算法无法解决对象间循环引用的问题，虚拟机通常采用可达性分析算法。
　　常见的垃圾回收算法有：标记 - 清除法、复制算法、标记 -]]></description><category></category></item><item><title><![CDATA[LeakCanary使用指南(1)]]></title><link>https://blog.youkuaiyun.com/hmh0512/article/details/57053265</link><guid>https://blog.youkuaiyun.com/hmh0512/article/details/57053265</guid><author>hmh0512</author><pubDate>Sat, 25 Feb 2017 03:49:57 +0800</pubDate><description><![CDATA[引言　　还在为不会使用MAT而烦恼吗？还在对着MAT工具解析出的hprof图拼命找内存泄露的源头吗？放弃挣扎吧，少年。Android Studio时代，我们使用LeakCanary——傻瓜式的内存泄露检测工具。如果你想了解引发Java内存泄露的深层原因，请移步Java 内存从分配到泄露 了解相关基础知识。简介　　LeakCanary产自著名的Square公司，就是那个生产了网络请求框架OkHttp、]]></description><category></category></item><item><title><![CDATA[Android面试遇到的问题(1)]]></title><link>https://blog.youkuaiyun.com/hmh0512/article/details/55095325</link><guid>https://blog.youkuaiyun.com/hmh0512/article/details/55095325</guid><author>hmh0512</author><pubDate>Tue, 14 Feb 2017 10:13:38 +0800</pubDate><description><![CDATA[数据结构和算法类
顺序表和链表的区别？
  顺序表随机访问快，插入删除慢；链表插入删除快，随机访问慢。栈和队列的区别？
  栈：先进后出，队列：先进先出常用的排序算法有哪些？
  冒泡排序、选择排序、快速排序、堆排序等。快速排序的实现思想是怎样？快速排序的时间复杂度是多少？
  划分，在待排序的数列中随机选择一个x，然后通过比较最终确定它在数列中的最终位置。这个数将原数列分成三部分：比x小的数、x、]]></description><category></category></item><item><title><![CDATA[理解装饰者模式]]></title><link>https://blog.youkuaiyun.com/hmh0512/article/details/54981875</link><guid>https://blog.youkuaiyun.com/hmh0512/article/details/54981875</guid><author>hmh0512</author><pubDate>Sat, 11 Feb 2017 11:55:51 +0800</pubDate><description><![CDATA[装饰者模式的书面定义是：“动态地给一个对象添加一些额外的职责。就增加功能来说，装饰模式相比生成子类更为灵活。”——语出《Android源码设计模式解析与实战》。]]></description><category></category></item><item><title><![CDATA[怎样将自己的工程改造成库，并上传到Github作为依赖]]></title><link>https://blog.youkuaiyun.com/hmh0512/article/details/53818058</link><guid>https://blog.youkuaiyun.com/hmh0512/article/details/53818058</guid><author>hmh0512</author><pubDate>Thu, 22 Dec 2016 18:11:36 +0800</pubDate><description><![CDATA[点击Github上项目主页的Release一键发布后，打开JitPack官网https://jitpack.io/，在输入框中粘贴刚刚在Github上Release的项目的地址。点击**Look up**然后在弹出的输入框中点击**Get it** 完成库的生成。然后看到我们熟悉的添加依赖的指导。将Gradle和Maven的添加依赖的指导复制到项目的自述文件README.md中指导别人如何使用你的库。]]></description><category></category></item><item><title><![CDATA[使用Fiddler对手机进行抓包]]></title><link>https://blog.youkuaiyun.com/hmh0512/article/details/53740423</link><guid>https://blog.youkuaiyun.com/hmh0512/article/details/53740423</guid><author>hmh0512</author><pubDate>Mon, 19 Dec 2016 15:10:51 +0800</pubDate><description><![CDATA[1、打开Fiddler-->Tools-->Options，选择第三个Tab Connections，勾选 Allow remote computers to connect。2、windows键+R-->输入cmd-->输入ipconfig回车查看本机IP。3、确保手机和电脑在同一网段内。点击进入所连接的WiFi的详情，在代理一项选择手动，然后在主机名中填写第二步中查看的电脑IP，端口号填8888。]]></description><category></category></item><item><title><![CDATA[Retrofit中使用@PartMap实现带进度回调的文件上传]]></title><link>https://blog.youkuaiyun.com/hmh0512/article/details/53732590</link><guid>https://blog.youkuaiyun.com/hmh0512/article/details/53732590</guid><author>hmh0512</author><pubDate>Mon, 19 Dec 2016 02:36:59 +0800</pubDate><description><![CDATA[因项目重构需要，最近一直在研究Retrofit的使用，并且封装成适合自己项目的网络请求框架。因为我们的项目中已经和后台约定，所有请求都使用POST请求，并且只接受JSON格式的参数，返回结果也是JSON格式。因此，我要封装的网络请求框架只需考虑三种请求：
  Post with JSON， 就是向后台提交JSON数据
  Upload with progress，就是实现带进度回调的文件上传
  Download]]></description><category></category></item><item><title><![CDATA[Retrofit2提交JSON格式的数据]]></title><link>https://blog.youkuaiyun.com/hmh0512/article/details/53474842</link><guid>https://blog.youkuaiyun.com/hmh0512/article/details/53474842</guid><author>hmh0512</author><pubDate>Tue, 06 Dec 2016 01:56:09 +0800</pubDate><description><![CDATA[上述代码的掣肘显而易见，那就是需要为每个请求都封装一个bean。使用这种方式的博友们还专门提供了自动生成这样的bean的工具类，可谓良苦用心。Java Web开发中也许习惯以bean作为查询条件，每张数据库表对应一个bean，很容易获得。即使bean中很多字段根本用不到，但是简单粗暴将整个bean传过去作为参数，使用起来非常方便。而以移动端的开发习惯，我们并不会为每个request封装一个特定的bean。而只会为每个]]></description><category></category></item><item><title><![CDATA[Android源码中的观察者模式]]></title><link>https://blog.youkuaiyun.com/hmh0512/article/details/52295718</link><guid>https://blog.youkuaiyun.com/hmh0512/article/details/52295718</guid><author>hmh0512</author><pubDate>Tue, 23 Aug 2016 23:57:42 +0800</pubDate><description><![CDATA[在使用ListView时，数据改变后，我们会手动去调用ListView对应的adapter的setDataSetChanged()方法来通知ListView更新UI。换一种说法，ListView的UI是观察者，ListView对应的adapter中的数据是被观察者，ListView通过注册一个观察者到adapter中，以实现监听adapter的数据变化的目的。经过刨祖坟一般的Ctrl+鼠标左键之后，画出如下UML类图。图中可以看到，ListView注册到adapter中的观察者叫AdapterDataSet]]></description><category></category></item></channel></rss>