<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[居家小男的博客]]></title><description><![CDATA[移动的code]]></description><link>https://blog.youkuaiyun.com/dhbdbsbsn</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; dhbdbsbsn]]></copyright><item><title><![CDATA[Activity启动流程]]></title><link>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/109015491</link><guid>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/109015491</guid><author>dhbdbsbsn</author><pubDate>Sun, 11 Oct 2020 19:11:42 +0800</pubDate><description><![CDATA[Activity启动流程

参考：https://www.jianshu.com/p/4fb8c0735e22?utm_campaign=haruki
]]></description><category></category></item><item><title><![CDATA[MVP架构由浅入深篇三（终极版）]]></title><link>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108805796</link><guid>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108805796</guid><author>dhbdbsbsn</author><pubDate>Sat, 26 Sep 2020 00:04:46 +0800</pubDate><description><![CDATA[MVP架构由浅入深篇三（终极版）

前言：在从基础版MVP架构优化成进阶版MVP架构的过程中，几乎每个单元都做了很大优化并封装到了base层，但是唯独Model层没什么变化。所以，终极版MVP架构的优化主要就是对Model层的优化。

一、Model单独封装，集中管理

先看一下整体的架构模型先：



Model层相比其他单元来说其功能就是通过回调接口向上层返回数据。再就是MVP的理念是让业务逻辑互相独立，这就导致每个的网络请求也被独立成了单个Model，这种方式在实际开发中就会出现一些问题：

无法对所]]></description><category></category></item><item><title><![CDATA[MVP架构由浅入深篇二（进阶版）]]></title><link>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108803805</link><guid>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108803805</guid><author>dhbdbsbsn</author><pubDate>Fri, 25 Sep 2020 22:54:53 +0800</pubDate><description><![CDATA[MVP架构由浅入深篇二（进阶版）

前言：在MVP基础版的讨论中我们发现了基础版MVP存在的不足之处，1.通用性差；2.存在漏洞；3.有重复代码。在本篇内容中，我们会对基础版MVP进行升级，到进阶版MVP解决基础版MVP遇到的问题。

目录

MVP架构由浅入深篇二（进阶版）

一、在Presenter层调用MvpView接口方法时可能出现空指针异常

1.新增Callback接口

2.新增BaseView接口

3.新增BasePresenter类

4.新增BaseActivity

5.MvpCal]]></description><category></category></item><item><title><![CDATA[MVP架构由浅入深篇一（基础版）]]></title><link>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108785707</link><guid>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108785707</guid><author>dhbdbsbsn</author><pubDate>Fri, 25 Sep 2020 12:24:08 +0800</pubDate><description><![CDATA[MVP架构由浅入深篇一

前言：不得不说，才开始学习MVP架构各种接口的调用和解耦代码真的让人眼花缭乱，对于很多问题都是一知半解：

关于如何在Activity中高效的复用Presenter和View；
	Mode层定义到什么程度才算是比较理想的解耦；
	Model层与Presenter层如何比较优雅的相互通信。
所以决定静下心来理解一下该架构的艺术。博客主要参考https://www.jianshu.com/p/5c3bc32afa36?utm_campaign=haruki，其中加入自己的理解和代码实现]]></description><category></category></item><item><title><![CDATA[Kotlin协程基础]]></title><link>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108763894</link><guid>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108763894</guid><author>dhbdbsbsn</author><pubDate>Thu, 24 Sep 2020 14:08:39 +0800</pubDate><description><![CDATA[Kotlin协程基础知识

前言：其实以前学习C#也了解过协程的概念，但是在深入学习Kotlin的时候准备系统的认识一下协程，同时与Java的线程进行一个对比。

主要参考：https://www.jianshu.com/p/6e6835573a9c结合实际代码做了修改并且附带运行结果，使用IDEA的gradle构建项目方便添加相应依赖，至于gradle如何构建项目，请看我前面的内容。

目录

Kotlin协程基础知识

一、协程的概念

二、协程的简单测试

1.使用runBlocking:T创建协程.]]></description><category></category></item><item><title><![CDATA[Kotlin运算符重载及其他约定]]></title><link>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108759896</link><guid>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108759896</guid><author>dhbdbsbsn</author><pubDate>Wed, 23 Sep 2020 21:57:20 +0800</pubDate><description><![CDATA[Kotlin运算符重载及其他约定

前言：内容主要包括运算符重载、约定（支持各种运算的特殊命名函数）、委托属性，结合代码，让重载运算符相关知识简单易懂。

目录

Kotlin运算符重载及其他约定

一、概述

二、重载算数运算符

1.重载二元算数运算

2.重载复合赋值运算符

3.重载一元运算符

三、重载比较运算符

1.等号运算符：“equals”

2.排序运算符：compareTo

四、集合与区间的定义

1.通过下标来访问元素：get和set

2.in 的约定

3.rangeTo的约定]]></description><category></category></item><item><title><![CDATA[Android线程间通信]]></title><link>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108747858</link><guid>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108747858</guid><author>dhbdbsbsn</author><pubDate>Wed, 23 Sep 2020 12:11:18 +0800</pubDate><description><![CDATA[Android线程间通信

前言：内容主要从android线程间通信方式进行入手，首先分析了线程间通信的几种方式，再深入分析线程间通信的机制，主要分析工作线程与工作线程间通信，因为主线程和工作线程间通信网上已经很多例子了。

目录

Android线程间通信

一、Android线程间通信的四种实现方式

1.Handler进行线程通信==&gt;消息机制

2.runOnUiThread

3.View.post(Runnable r)

4.AsyncTask

二、线程间通信机制



一、Andr.]]></description><category></category></item><item><title><![CDATA[Android JNI基础及其简单使用]]></title><link>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108721266</link><guid>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108721266</guid><author>dhbdbsbsn</author><pubDate>Mon, 21 Sep 2020 23:55:52 +0800</pubDate><description><![CDATA[Android JNI基础及其简单使用

前言：内容主要包括jni的概念、安卓jni开发的两种方式以及工具的简单使用，读者将了解最基础的jni开发流程。

主要参考：齐行超老师的教程

目录

Android JNI基础及其简单使用

一、JNI、NDK、Cmake、ndk-build的概述

二、Cmake工具的使用（Android默认）

三、ndk-build工具的使用



一、JNI、NDK、Cmake、ndk-build的概述

JNI（Java Native Interface）Java本地.]]></description><category></category></item><item><title><![CDATA[易懂Android消息机制分析]]></title><link>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108705791</link><guid>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108705791</guid><author>dhbdbsbsn</author><pubDate>Mon, 21 Sep 2020 13:25:10 +0800</pubDate><description><![CDATA[最浅显讲解Android消息机制

前言：以《安卓开发艺术探索》和自己经验为基础，介绍Android消息机制。Android消息机制主要指Handler机制，同时Handler需要底层的MessageQueue和Looper支撑。Looper会对消息队列进行无限循环，一有消息就会处理。同时在Looper中还有一个重要角色，那就是ThreadLocal，注意他并不是线程，他可以在不同线程中互不干扰地存储数据。还要注意，线程是默认没有Looper的，所以需要自己创建，但是在MainActivity中的Activ]]></description><category></category></item><item><title><![CDATA[Java正则表达式的使用]]></title><link>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108559826</link><guid>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108559826</guid><author>dhbdbsbsn</author><pubDate>Sun, 13 Sep 2020 11:36:44 +0800</pubDate><description><![CDATA[正则表达式

前言：本篇博客将介绍正则表达式在Java中的应用，其他语言类似，正则表达式是一个共有的规则。

目录

正则表达式

一、概述

二、正则表达式规则

三、栗子说明

总结



一、概述

正则表达式，又称规则表达式。（英语：Regular Expression，在代码中常简写为regex、regexp或RE）正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。在众多语言中都可以支持正则表达式，如Perl、PHP、Java、Python、Ruby等。当然在Java中也可以通过调用.]]></description><category></category></item><item><title><![CDATA[Kotlin系列篇--Kotlin函数定义和调用]]></title><link>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108551092</link><guid>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108551092</guid><author>dhbdbsbsn</author><pubDate>Sat, 12 Sep 2020 22:54:09 +0800</pubDate><description><![CDATA[第三部分：Kotlin函数的定义和调用

前言：为了让介绍更简单直白，我将把Kotlin集合、字符串和正则表达式作为重点问题领域

目录

第三部分：Kotlin函数的定义和调用



一、Kotlin中集合的创建：

二、顶层函数和属性：

三、扩展函数和属性：

四、可变参数、中缀调用：

五、正则表达式：

六、局部函数：

总结：

一、Kotlin中集合的创建：

在kotli.collections包中包含List(有序集合)、Set(无序集合)、Map(健值对)三种集合：

Collect..]]></description><category></category></item><item><title><![CDATA[Kotlin系列篇--Kotlin基础]]></title><link>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108549745</link><guid>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108549745</guid><author>dhbdbsbsn</author><pubDate>Sat, 12 Sep 2020 16:09:43 +0800</pubDate><description><![CDATA[第二部分：Kotlin基础

前言：这一章我们将学习Kotlin基本要素：变量、函数和类；Kotlin中的控制结构；智能转换；Kotlin把类型检查和转换合并成一次操作，最后我们会学习异常。

一、函数和变量

函数：


fun max(a:Int,b:Int):Int{
    return if (a&gt;b) a else b
}

可见，函数声明是由fun关键字开始，其后就是函数名，括号内是参数列表，冒号后面是返回值。在Kotlin中if语句是有结果的表达式，而Java中if是语句，没有返回结果]]></description><category></category></item><item><title><![CDATA[Kotlin系列篇--Kotlin定义和目的介绍]]></title><link>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108549111</link><guid>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108549111</guid><author>dhbdbsbsn</author><pubDate>Sat, 12 Sep 2020 14:56:24 +0800</pubDate><description><![CDATA[Kotlin学习系列

前言：本系列文章将介绍Kotlin的使用，分为11章进行介绍，以《Kotlin实战》为基础，每章一篇博客，将采用模块化的讲解让读者对Kotlin有深入的了解，适用于有Java开发经验的读者，废话少说，下面就开始介绍Kotlin。

第一部分：Kotlin定义和目的

一、Kotlin概述：

Kotlin是对Java语言的新编程语言。具有简洁、安全、务实，并且专注于与Java代码的互操作性。他几乎可以用于现在Java使用的任何地方：服务器开发、Android开发等等。

二、Kotl]]></description><category></category></item><item><title><![CDATA[注解、反射、动态编译、字节码操作]]></title><link>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108528438</link><guid>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108528438</guid><author>dhbdbsbsn</author><pubDate>Fri, 11 Sep 2020 23:02:16 +0800</pubDate><description><![CDATA[注解、反射、字节码操作

前言：本篇博客将介绍Java中注解的定义、使用以及反射对Java动态性的支持和Java字节码操作，通过本篇内容，读者将对Java知识有更加深刻的理解，同时为后面Android的高级框架学习打好基础。

一、注解

概述：

Annotation是从JDK5.0开始引入的，注解并不是程序本身，但可以被其他程序读取，如果没有注解信息处理流程，注解将毫无意义。注解可以在Java很多地方使用，如类、属性、方法等等。

1-注解入门

2-内置注解

3-自定义注解、元注解

二、反射

三]]></description><category></category></item><item><title><![CDATA[Retrofit基本使用及原理+源码解析（入门级）]]></title><link>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108523823</link><guid>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108523823</guid><author>dhbdbsbsn</author><pubDate>Thu, 10 Sep 2020 23:48:57 +0800</pubDate><description><![CDATA[Retrofit基本使用及原理+源码解析（入门级）

前言：本篇博文主要对Retrofit做一个基本介绍，了解Retrofit基本使用以及部分源码解析，让读者对Retrofit框架有一个基本了解，主要参考文章：https://www.jianshu.com/p/07f7eb4aa9ae

目录

Retrofit基本使用及原理+源码解析（入门级）

一、概述

二、基本使用

1-导入Retrofit框架：

2-使用Retrofit框架：

三、Retrofit内部的实现

1-Retrofit实例的创建]]></description><category></category></item><item><title><![CDATA[glide的内存管理和缓存机制]]></title><link>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108502887</link><guid>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108502887</guid><author>dhbdbsbsn</author><pubDate>Thu, 10 Sep 2020 14:12:36 +0800</pubDate><description><![CDATA[glide生命周期管理、内存管理、缓存机制、加载器、观察者模式

前言：本系列博文主要通过借鉴其他优秀博文以及自己的实际开发经验综合得出，主要分析glide相关使用、机制以及设计模式等内容，相信这篇博文会让你对glide有更加深入的理解。本篇是系列文章的第三章。

篇三 glide的内存管理和缓存机制

前言：本篇博客将深入浅出地介绍glide的内存管理机制，主要借鉴来源：https://www.jianshu.com/p/17644406396b

一、Glide加载图片整体流程了解：



Glide.]]></description><category></category></item><item><title><![CDATA[glide的生命周期管理]]></title><link>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108492110</link><guid>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108492110</guid><author>dhbdbsbsn</author><pubDate>Wed, 09 Sep 2020 19:00:54 +0800</pubDate><description><![CDATA[glide生命周期管理、内存管理、缓存机制、加载器、观察者模式

前言：本系列博文主要通过借鉴其他优秀博文以及自己的实际开发经验综合得出，主要分析glide相关使用、机制以及设计模式等内容，相信这篇博文会让你对glide有更加深入的理解。本篇是系列文章的第二章。



篇二 glide的生命周期管理

前言：本篇博客将介绍glide的生命周期管理，如何与Fragment和Activity绑定的。

我们知道将 Activity/Fragment 对象作为参数传给Glide.with(context/fr..]]></description><category></category></item><item><title><![CDATA[glide的基本使用及进阶使用]]></title><link>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108477120</link><guid>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108477120</guid><author>dhbdbsbsn</author><pubDate>Tue, 08 Sep 2020 23:41:58 +0800</pubDate><description><![CDATA[glide生命周期管理、内存管理、缓存机制、加载器、观察者模式

前言：本系列博文主要通过借鉴其他优秀博文以及自己的实际开发经验综合得出，主要分析glide相关使用、机制以及设计模式等内容，相信这篇博文会让你对glide有更加深入的理解。本篇是系列文章的第一章。

篇一glide的基本使用及进阶使用

前言：本篇博客将介绍glide的基本使用和进阶使用

目录

一、简介

二、使用

三、Target篇

四、Transformations篇

五、自定义动画篇

六、Module篇



一、简介...]]></description><category></category></item><item><title><![CDATA[OKhttp源码分析]]></title><link>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108450596</link><guid>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108450596</guid><author>dhbdbsbsn</author><pubDate>Mon, 07 Sep 2020 17:50:28 +0800</pubDate><description><![CDATA[OKhttp源码分析

前言：本篇博客将对OKhttp的重点代码和框架流程进行分析，重点是对OKhttp的连接器链进行深入理解，同时文末将对整个流程进行总结提炼。

概述：

OKhttp拦截器（interceptor）是OKhttp网络请求框架的精髓所在，通过框架对拦截器的逐个调用实现了高效灵活的网络请求，首先放一张图让大家对拦截器链有一个认识吧：



代码分析：

下面从一个最简单的网络请求开始分析OKhttp整个请求过程


String url = "http://wwww.baidu.com";]]></description><category></category></item><item><title><![CDATA[OKhttp中的okio、拦截器、响应]]></title><link>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108432267</link><guid>https://blog.youkuaiyun.com/dhbdbsbsn/article/details/108432267</guid><author>dhbdbsbsn</author><pubDate>Sun, 06 Sep 2020 21:31:10 +0800</pubDate><description><![CDATA[OKhttp中的okio、拦截器、响应

前言：本篇博客将由浅入深地对OKhttp进行解析，包括基本使用、okio、拦截器和响应等内容，和读者一起全面系统地了解OKhttp的知识，深入了解Android客户端网络请求方法及过程，学习OKhttp采用的设计模式和架构。

一、OKhttp概述：

HTTP是现代应用常用的一种交换数据和媒体的网络方式，高效地使用HTTP能让资源加载更快，节省带宽。OkHttp是一个高效的HTTP客户端，它有以下默认特性：

支持HTTP/2，允许所有同一个主机地址的请求共享同一]]></description><category></category></item></channel></rss>