<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[isJoker的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/isJoker</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; isJoker]]></copyright><item><title><![CDATA[Android DataBinding原理分析]]></title><link>https://blog.youkuaiyun.com/isJoker/article/details/103447280</link><guid>https://blog.youkuaiyun.com/isJoker/article/details/103447280</guid><author>isJoker</author><pubDate>Sun, 08 Dec 2019 18:23:32 +0800</pubDate><description><![CDATA[一、DataBinding使用
本文着重讲解DataBinding原理，使用的例子比较简单，若读者想要了解更多的DataBinding的使用方法介绍，可以自寻相关资料，本文纯属个人理解，若有错误，还望指出（抱拳）
在app模块的build.gradle中加入如下配置
android {
    ...
    dataBinding {
        enabled = true
    }
}...]]></description><category></category></item><item><title><![CDATA[Gradle Transform 详解]]></title><link>https://blog.youkuaiyun.com/isJoker/article/details/103399811</link><guid>https://blog.youkuaiyun.com/isJoker/article/details/103399811</guid><author>isJoker</author><pubDate>Thu, 05 Dec 2019 10:44:24 +0800</pubDate><description><![CDATA[我们先来看下Android应用程序打包流程：

通过上图可知，我们只要在图中红色箭头处拦截（生成class文件之后，dex文件之前），就可以拿到当前应用程序中所有的.class文件，再去借助ASM之类的库，就可以遍历这些.class文件中所有方法，再根据一定的条件找到需要的目标方法，最后进行修改并保存，就可以插入我们的埋点代码。
Google从 Android Gradle 1.5.0 开始，提供...]]></description><category></category></item><item><title><![CDATA[AOP与AspectJ详解之项目实战]]></title><link>https://blog.youkuaiyun.com/isJoker/article/details/103339982</link><guid>https://blog.youkuaiyun.com/isJoker/article/details/103339982</guid><author>isJoker</author><pubDate>Sun, 01 Dec 2019 21:34:50 +0800</pubDate><description><![CDATA[AOP
AOP是 Aspect Oriented Programming 的缩写，即“面向切面编程”，通过使用AOP可以在编译期间对代码进行动态管理，一达到统一维护的目的。AOP其实是OOP编程思想的一种延续，利用AOP，我们可以对业务逻辑的各个模块进行隔离，降低模块间耦合度，提高程序的可重用性，进而提高开发效率。利用AOP，我们还可以在无侵入的状态下在宿主中插入一些代码逻辑，从而实现诸如日志埋点...]]></description><category></category></item><item><title><![CDATA[Mac环境用Shell脚本编译最新版ffmpeg-4.2.1]]></title><link>https://blog.youkuaiyun.com/isJoker/article/details/103108648</link><guid>https://blog.youkuaiyun.com/isJoker/article/details/103108648</guid><author>isJoker</author><pubDate>Sun, 17 Nov 2019 14:44:47 +0800</pubDate><description><![CDATA[Mac环境用Shell脚本编译最新版ffmpeg-4.2.1
FFmpeg简介

FFmpeg是一套可以用来记录、转换数字音频、视频，并能将其转化为流的开源计算机程序
FFmpeg是一个多媒体视频处理工具，有非常强大的功能，包括视频采集功能、视频格式转换、视频抓图、给视频加水印等
FFmpeg是一套开源免费跨平台的多媒体框架。它提供了录制、转换以及流化音视频的完整解决方案，目前bilibili、抖...]]></description><category></category></item><item><title><![CDATA[Android事件分发机制源码分析]]></title><link>https://blog.youkuaiyun.com/isJoker/article/details/102854744</link><guid>https://blog.youkuaiyun.com/isJoker/article/details/102854744</guid><author>isJoker</author><pubDate>Fri, 01 Nov 2019 11:49:43 +0800</pubDate><description><![CDATA[Android事件分发机制源码分析
一、事件定义
定义：当用户触摸屏幕时，将产生的触摸行为（Touch事件）
事件类型

MotionEvent.ACTION_DOWN 手指刚接触屏幕
MotionEvent.ACTION_MOVE 手指在屏幕上滑动
MotionEvent.ACTION_UP 手指从屏幕上松开
MotionEvent.ACTION_CANCEL 非人为因素取消

二、事件序列
正...]]></description><category></category></item><item><title><![CDATA[自定义Android属性动画框架]]></title><link>https://blog.youkuaiyun.com/isJoker/article/details/102810310</link><guid>https://blog.youkuaiyun.com/isJoker/article/details/102810310</guid><author>isJoker</author><pubDate>Tue, 29 Oct 2019 23:00:12 +0800</pubDate><description><![CDATA[通过本篇文章，你将会了解

安卓属性动画的基本架构
插值器和估值器在动画中的作用
手撸属性动画

设想一下，如果你是google的工程师，让你去设计一个属性动画，你该如何设计？在设计属性动画时我们应该要考虑哪些问题？

生成动画的api调用约简单越好
一个View可以有多个动画，但同时只能有一个在运行
动画的执行不能依赖自身的for循环
如何让动画动起来

我们先来看下属性动画的种类

平移动画
...]]></description><category></category></item><item><title><![CDATA[源码分析UI绘制三部曲之draw]]></title><link>https://blog.youkuaiyun.com/isJoker/article/details/102773184</link><guid>https://blog.youkuaiyun.com/isJoker/article/details/102773184</guid><author>isJoker</author><pubDate>Sun, 27 Oct 2019 22:49:15 +0800</pubDate><description><![CDATA[众所周知，UI绘制三部曲是measure、layout、draw
本篇我们分析ViewRootImpl#performDraw
    private void performDraw() {
        if (mAttachInfo.mDisplayState == Display.STATE_OFF &amp;&amp; !mReportNextDraw) {
            r...]]></description><category></category></item><item><title><![CDATA[源码分析UI绘制三部曲之layout]]></title><link>https://blog.youkuaiyun.com/isJoker/article/details/102772657</link><guid>https://blog.youkuaiyun.com/isJoker/article/details/102772657</guid><author>isJoker</author><pubDate>Sun, 27 Oct 2019 22:13:36 +0800</pubDate><description><![CDATA[众所周知，UI绘制三部曲是measure、layout、draw
本篇我们分析View#layout
    private void performLayout(WindowManager.LayoutParams lp, int desiredWindowWidth,
            int desiredWindowHeight) {
        mLayoutRequested...]]></description><category></category></item><item><title><![CDATA[Android组件化工程结构以及项目实施]]></title><link>https://blog.youkuaiyun.com/isJoker/article/details/102699352</link><guid>https://blog.youkuaiyun.com/isJoker/article/details/102699352</guid><author>isJoker</author><pubDate>Wed, 23 Oct 2019 13:00:53 +0800</pubDate><description><![CDATA[组件化优点
1、代码解耦
2、方便多人协作开发
3、可复用性高，不同的APP可复用不同组件
4、每个组件可独立运行，方便开发调试
组件化工程结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

**第一层：**空壳app。应用的入口，存放启动页，依赖所有业务组件
**第二层：**业务组件。根据不同业务横向拆分出来的业务组件。任何一个业务组件都可以独立出来成为一个应用
**第...]]></description><category></category></item><item><title><![CDATA[从源码角度分析AppCompactActivity#setContentView]]></title><link>https://blog.youkuaiyun.com/isJoker/article/details/102644002</link><guid>https://blog.youkuaiyun.com/isJoker/article/details/102644002</guid><author>isJoker</author><pubDate>Sat, 19 Oct 2019 22:26:10 +0800</pubDate><description><![CDATA[之前有一篇文章源码分析了Activity#setContentView，但是目前我们写的Activity基本都是继承自AppCompactActivity，google也是建议继承AppCompactActivity可以提高一些兼容性，今天我们就来一探AppCompactActivity#setContentView的究竟，看看跟Activity#setContentView有何异同。
依照之前的...]]></description><category></category></item><item><title><![CDATA[源码分析UI绘制三部曲之measure]]></title><link>https://blog.youkuaiyun.com/isJoker/article/details/102633050</link><guid>https://blog.youkuaiyun.com/isJoker/article/details/102633050</guid><author>isJoker</author><pubDate>Fri, 18 Oct 2019 22:30:28 +0800</pubDate><description><![CDATA[众所周知，UI绘制三部曲是measure、layout、draw
本篇我们分析View#measure
public final void measure(int widthMeasureSpec, int heightMeasureSpec) {
        ...
        final boolean matchesSpecSize = getMeasuredWidth() == M...]]></description><category></category></item><item><title><![CDATA[从源码的角度分析View的绘制流程]]></title><link>https://blog.youkuaiyun.com/isJoker/article/details/102578667</link><guid>https://blog.youkuaiyun.com/isJoker/article/details/102578667</guid><author>isJoker</author><pubDate>Wed, 16 Oct 2019 08:40:42 +0800</pubDate><description><![CDATA[温馨提示：以下源码分析会截取源码进行说明，部分方法源码较长会只保留关键代码，其他代码用…省略
View的绘制入口是ActivityThread#handleResumeActivity
final void handleResumeActivity(IBinder token,
            boolean clearHide, boolean isForward, boolean re...]]></description><category></category></item><item><title><![CDATA[从源码角度分析Activity#setContentView]]></title><link>https://blog.youkuaiyun.com/isJoker/article/details/102545973</link><guid>https://blog.youkuaiyun.com/isJoker/article/details/102545973</guid><author>isJoker</author><pubDate>Mon, 14 Oct 2019 13:21:38 +0800</pubDate><description><![CDATA[我们平时在开发的过程中将一个layout绘制出来是通过Activity#setContentView，那么我们就从setContentView入手来看整个绘制流程。
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
...]]></description><category></category></item><item><title><![CDATA[Android9.0应用程序启动过程源码分析]]></title><link>https://blog.youkuaiyun.com/isJoker/article/details/95523840</link><guid>https://blog.youkuaiyun.com/isJoker/article/details/95523840</guid><author>isJoker</author><pubDate>Thu, 11 Jul 2019 21:33:52 +0800</pubDate><description><![CDATA[用户从Launcher程序点击应用图标可启动应用的入口Activity，Activity启动时需要多个进程之间的交互，Android系统中有一个zygote进程专用于孵化Android框架层和应用层程序的进程。还有一个system_server进程，该进程里运行了很多binder service，例如ActivityManagerService，PackageManagerService，Wind...]]></description><category></category></item><item><title><![CDATA[CoodinatorLayout 实现 banner沉浸式+滚动视差+悬浮搜索框+标题置顶复杂联动效果]]></title><link>https://blog.youkuaiyun.com/isJoker/article/details/81950787</link><guid>https://blog.youkuaiyun.com/isJoker/article/details/81950787</guid><author>isJoker</author><pubDate>Wed, 22 Aug 2018 21:00:37 +0800</pubDate><description><![CDATA[1.开门见上，先上效果图

                 

                                        代码传送门

2.CoodinatorLayout及相关控件简介

      CoordinatorLayout遵循Material Design风格，包含在 support Library中，结合AppBarLayout, CollapsingToo...]]></description><category></category></item><item><title><![CDATA[Hadoop体系结构之HDFS]]></title><link>https://blog.youkuaiyun.com/isJoker/article/details/79988388</link><guid>https://blog.youkuaiyun.com/isJoker/article/details/79988388</guid><author>isJoker</author><pubDate>Wed, 18 Apr 2018 15:36:57 +0800</pubDate><description><![CDATA[        上篇讲到了HDFS的设计思想GFS，这篇接着讲HDFS架构。        HDFS全称为 Hadoop Distributed File System， 是 Hadoop 的分布式文件系统的实现。它的设计目标是存储海量数据，并为分布在网络中的大量客户端提供数据访问。HDFS的实现解决了存在于众多分布式文件系统（如 NFS）中大量的问题，具体来说，HDFS实现了以下问题：能够保存非...]]></description><category></category></item><item><title><![CDATA[大数据之HDFS设计思想GFS]]></title><link>https://blog.youkuaiyun.com/isJoker/article/details/79984469</link><guid>https://blog.youkuaiyun.com/isJoker/article/details/79984469</guid><author>isJoker</author><pubDate>Wed, 18 Apr 2018 10:56:44 +0800</pubDate><description><![CDATA[        但凡开始讲大数据的，都离不开谷歌的三篇论文：Google File System(GFS)，MapReduce，BigTable。本篇主要介绍谷歌的GFS，后面会介绍Mapreduce和BigTable。        我们先来看一下Linux的体系结构                Linux文件系统中的文件是数据的集合，文件系统不仅包含着文件中的数据而且还有文件系统的结构，所有...]]></description><category></category></item><item><title><![CDATA[大数据之Hadoop生态系统概述]]></title><link>https://blog.youkuaiyun.com/isJoker/article/details/79976007</link><guid>https://blog.youkuaiyun.com/isJoker/article/details/79976007</guid><author>isJoker</author><pubDate>Tue, 17 Apr 2018 16:44:38 +0800</pubDate><description><![CDATA[一、什么是大数据                首先，我们来了解一下，什么是大数据？大数据（BigData）是指无法在一定时间内用常规软件工具进行捕捉、管理和处理的数据集合，是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率、多样化的信息资产。由IBM提出的大数据的五个特征（5V）：Volume(大量)、Velocity（高速）、Variety（多样）、Value（价值...]]></description><category></category></item><item><title><![CDATA[热更新之Bugly框架的详细集成]]></title><link>https://blog.youkuaiyun.com/isJoker/article/details/78850592</link><guid>https://blog.youkuaiyun.com/isJoker/article/details/78850592</guid><author>isJoker</author><pubDate>Wed, 20 Dec 2017 10:45:41 +0800</pubDate><description><![CDATA[对于广大移动开发者而言，App的版本更新升级是再寻常不过的事。但是当你发现你刚发出去的包有紧急Bug需要修复时，你就不淡定了，又要经过繁琐的传统的App版本更新流程，重新发布一个修复Bug的版本，再将Apk上传到各大应用商店，用户需要花费时间去应用商店重新下载安装。如果Bug比较严重，有些用户可能会失去耐心，直接卸载掉App，于是乎，你们的用户就这样流失了。    传统的更新流程有几个弊端，一是重新]]></description><category></category></item><item><title><![CDATA[mvp+rxjava2+retrofit2项目框架]]></title><link>https://blog.youkuaiyun.com/isJoker/article/details/78790687</link><guid>https://blog.youkuaiyun.com/isJoker/article/details/78790687</guid><author>isJoker</author><pubDate>Wed, 13 Dec 2017 13:00:53 +0800</pubDate><description><![CDATA[上个项目忙完了第一版，在此对上个项目的架构总结下，不断总结分析，才能发现结构的短板，才能搭出属于自己的最完美的架构。
**1．分包**
我的分包如下图：
    - adapter：放一些adapter类，属于view层的
    - api：放一些网络请求相关的类，如配置retrofit
    - base：放一些activity、fragment、presenter的基类
    - comm]]></description><category></category></item></channel></rss>