自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

渡口一艘船

孤舟蓑笠翁,独钓寒江雪

原创 设计模式精简图册

设计模式精简图册 首发于我的公众号 设计模式图册 设计模式分类 创建型模式: 主要用于创建对象,包括 工厂方法(Factory Method) 抽象工厂(Abstract Factory) 单例(Singleton) 生成器(Builder) 原型(Prototype) 结构型模式: 用于...

2019-02-19 23:58:38 835 0

原创 团队项目必备神器——自定义Lint

Lint在android studio中内置了大概200个左右的lint检查,比如定义变量未使用,直接Handler报内存泄漏提醒,时时刻刻在监督着我们的代码。自己定制了一些Lint规则,项目开源在GitHub上 https://github.com/xsfelvis/LintDemo 为什...

2016-12-16 22:37:50 3057 14

原创 Flutter UI渲染分析

1、前言 本篇文章主要介绍Flutter 渲染框架及其渲染过程 Flutter是谷歌的移动UI框架,在此之前也有类似ReactNative、Weex等跨端方案,Flutter在一定程度上借鉴了ReactNative的思想,采用三棵树 其中element tree diff管理,来触发rende...

2020-02-12 15:27:47 290 0

原创 Flutter 中的生命周期分析

本篇主要介绍Flutter中的相关生命周期 分为 widget生命周期、app生命周期 Widget生命周期 flutter中widget主要分为 StatelessWidget 和 StatefulWidget 两种 二者生命周期不太一样 StatelessWidget(无状态) 如果一个...

2020-02-12 15:25:28 74 0

原创 idleHandler

idleHandler 什么是idleHandler Android是基于Looper消息循环的系统,我们通过Handler向Looper包含的MessageQueue投递Message,在MessageQueue中我们可以看到这样的一个接口 /** * Callback ...

2020-02-12 15:22:46 70 0

原创 Gradle插件从入门到进阶

Gradle插件从入门到进阶 1、简介 Gradle本身的领域对象主要有Project和Task。Project为Task提供了执行上下文,所有的Plugin要么向Project中添加用于配置的Property,要么向Project中添加不同的Task。一个Task表示一个逻辑上较为独立的执行过...

2019-05-05 23:35:46 719 0

原创 Android中的AOP

Android中的AOP 什么是AOP AOP(Aspect Oriented Program的首字母缩写)是一种面向切面编程的思想。这种编程思想是相对于OOP(ObjectOriented Programming即面向对象编程)来说的。 先来说一下大家熟悉的面向对象编程:面向对象的特点是继承、...

2019-05-02 11:54:23 89 0

原创 深入理解动态代理

千山鸟飞绝,万径人踪灭。 孤舟蓑笠翁,独钓寒江雪 ——唐·柳宗元《江雪》 首发于我的公众号 深入理解动态代理 一、概述 最近在阅读retrofit源码时,有个关键的所在就是动态代理,细细回想了一下动态代理,发现之前有些细节还没有理解到位,本篇博文将重新深入理解一下动态代理。 二、关于代理 ...

2019-02-22 22:45:54 467 0

原创 设计模式入门

0x00 概述本文主要介绍设计模式的六大原则,这是学习设计模式的总纲。设计模式其实是一套被反复使用、总结出来的代码设计经验的总结,使用设计模式是为了重用代码,让代码更加容易的被他人理解,保证代码的可靠性。在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johns...

2017-11-09 10:54:28 500 0

原创 设计模式学习记录

0x00 概述学习设计模式是一个漫长的过程,也是一个程序员登堂入室的必经之路。这篇博文就是记录学习设计模式的过程,会持续更新,每个模式都有对应的学习代码,学习在https://github.com/xsfelvis/DesignPattern.git0x01 大纲 创建型 结构型 行为...

2017-11-09 10:53:38 394 0

原创 你真的了解过度绘制吗?

本文主要谈谈Android过度绘制相关的知识点,并结合云课堂企业版首页优化过度绘制的实践总结一些与之相关的问题,与君共享,互相进步~ 本文将按照如下结构展开1、 表面问题产生2、 问题背后的探索 ---- 什么是过度绘制 ---- Android渲染机制3、 优化过度常用工具和套路4...

2017-11-04 15:58:14 6480 0

原创 butterknife及其背后的代码生成技术

本篇博文主要介绍butterknife使用及其背后的技术点,行文结构如下0x00 butterknife项目地址: https://github.com/JakeWharton/butterknife github原文是这样介绍的 Field and method binding for An...

2017-11-02 20:27:18 2201 0

原创 Service全面总结

service本篇博文主要介绍Service相关知识,具体目录如下0x00 什么是Service Service是一个应用程序组件,可以在后台长时间运行的操作,不提供用户界面; 一个应用程序可以启动一个服务,它将继续在后台运行,即使用户切换到另外一个应用 一个组件可以绑定到一个服务与它交互,甚至执...

2017-10-31 16:47:03 1628 0

原创 2个关于Adapter库的源码分析(AdapterDelegate、BaseRecyclerViewHelper)

0x00 概述 核心思想:都是围绕如何解决viewType、视图、数据与视图的绑定来进行一系列的封装,不同的库有着自己不同的手段而已 Adapter能在数据变化时候,内部实现逻辑不会改变,仅在外部添加新功能即可,那么要求Adapter对数据层是解耦的,不能显示持有外部数据,核心要点要把握好 R...

2017-10-30 20:08:15 2393 1

原创 密码学技术初探

0X00 概述本篇文章是对密码学基础知识的一些总结,旨在对密码学有一个概要认识。主要分为以下两个大的方面 密码对称密码 分组密码模式 公钥密码 混合密码 认证单向散列函数 消息认证码 数字签名 证书 0X01 密码对称密码(共享密钥密码)核心: 用相同的密钥进行加密和解密主要分为 DES、三...

2017-10-20 19:37:12 3628 0

原创 注解库之ButterKnife

butterknife解决的问题项目地址: https://github.com/JakeWharton/butterknife github原文是这样介绍的 Field and method binding for Android views which uses annotation pr...

2017-07-29 17:19:51 1917 6

原创 注解库之Dagger2

Dagger2Step1 使用0x00 Dagger2介绍 Dagger is a fully static, compile-time dependency injection framework for both Java and Android. It is an adaptation ...

2017-07-29 16:20:16 908 1

原创 Lottie的使用及原理浅析

lottie项目地址: https://github.com/xsfelvis/lottie-androidLottie支持Jellybean (API 16)及以上的系统什么是lottie?Airbnb最近开源了一个名叫Lottie的动画库,它能够同时支持iOS,Android与ReactNat...

2017-02-14 23:36:15 12883 4

原创 JNI两种注册过程实战

JNI系列JNI两种注册过程实战深入理解JNI概述Android OS加载JNI Lib的方法有两种 - JNI_OnLoad(动态注册) - 如果JNI Lib实现中没有定义JNI_OnLoad,则dvm调用dvm ResolveNativeMethod进行动态解析(静态注册) 因此,当 ...

2017-01-23 15:22:06 5775 9

原创 AS gradle 编译引起的bug

问题描述引起原因由于某些原因导致垃圾回收器,每次花费了大量的时间(by default 98% of all CPU time of the process),仅仅恢复了一点点内存(by default 2% of the heap),这个异常有效的提醒你,你的程序此时正停止了其他事情而仅仅忙于垃...

2017-01-12 19:26:19 1521 0

原创 ListView嵌套ViewPager+Fragment引起的Bug

发现问题之前发现过一次,情景一样,当时是将ListView替换为LinearLayout然后动态添加view解决,这次又发现这个问题,感觉得从根本上找出原因所在,毕竟listview嵌套多层viewpager+fragment场景还是存在很多的(如资产详情带图表切换),报的crash分析问题定位问...

2017-01-12 19:23:27 3891 0

原创 Andfix学习记录

概述篇AndFix,全称是Android hot-fix。是阿里开源的一个热补丁框架,允许APP在不重新发布版本的情况下修复线上的bug。支持Android 2.3 到 7.0,并且支持arm 与 X86系统架构的设备。完美支持Dalvik与ART的Runtime,补丁文件是以 .apatch 结...

2017-01-11 10:41:40 2412 0

原创 注解基础

0x00 概述本文主要是介绍注解的基础知识,为后面的APT和JavaPoet打下基础0x01 什么是注解注解(Annotation)是Java5的一个新特性,是插入在代码中的一种注释或者说是一种元数据(meta data),这些注释信息可以在编译期使用预编译工具进行获取处理,也可以在运行期使用Ja...

2017-01-10 23:14:57 2247 0

原创 编译期注解之JavaPoet

0x00 概述上一篇限于篇幅只介绍了APT,这篇来继续介绍javapoet,是square公司的开源库。正如其名,java诗人,通过注解来生成java源文件,通常要使用javapoet这个库与Filer配合使用。主要和注解配合用来干掉那些重复的模板代码(如butterknife 和databin...

2017-01-10 23:14:07 3177 0

原创 编译期注解之APT

0x00 概述前一篇介绍了注解的基本知识以及常见用法,由于运行期(RunTime)利用反射去获取信息还是比较损耗性能的,本篇将介绍一种使用注解更加优雅的方式,编译期(Compile time)注解,以及处理编译期注解的手段APT和Javapoet,限于篇幅,本篇着重介绍APT 首先你的注解需要声...

2017-01-10 23:12:12 2797 0

原创 支持手机和控制台log的小工具-ZeusLog

0x00 解决问题 新人刚到项目组,往往搞不清每个页面对应的Activity名称,导致完成需要一些时间浪费在找页面上 网络请求查看比较麻烦,需要代理,转为格式化json 系统Log比较挫 项目地址 https://github.com/xsfelvis/ZeusLog0x01 ZeusLog主要分...

2017-01-08 23:09:34 2770 0

翻译 Fragment的事务操作&Actvity的状态丢失

Fragment Transactions & Activity State Loss 本文翻译自Fragment Transactions & Activity State Loss, 下面所示的异常堆栈追踪在Honeycomb最早版本就一直在出现在StackOverflow...

2016-10-07 17:10:00 1617 0

原创 认识Zygote

概述zygote “受精卵”,由init进程通过解析init.zygote.rc文件而创建的,zygote所对应的可执行程序app_process,所对应的源文件是App_main.cpp,进程名为zygote。zygote孵化的第一个进程是System Server,而这两个都是java世界的半...

2016-06-07 22:37:36 2632 2

原创 深入理解JNI

深入理解JNI最近在学习android底层的一些东西,看了一些大神的博客,整体上有了一点把握,也产生了很多疑惑,于是再次把邓大神的深入系列翻出来仔细看看,下面主要是一些阅读笔记。JNI概述JNI是Java Native Interface的缩写 ,通常称为“Java本地调用”,通过这种技术可以做到...

2016-06-06 22:27:55 13324 0

原创 虚拟机类加载机制

类加载机制虚拟机把描述类的数据从Class文件(一串二进制字节流)加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是java的类加载机制加载时机类从被加载到虚拟机内存到卸载出内存为止,生命周期包括加载(Loading),验证(Verification...

2016-06-04 23:00:45 1061 0

原创 canvas的常见用法

Canvascanvas是一种抽象概念,是2D图形系统中的重要部分,canvas一系列函数最终都是android 2D图形库Skia的一些列封装,对应在SKCanvas.cpp。canvas在系统中的位置如下图所示可以将canvas看成一个透明的图层,使用canvas之后会产生一个透明图层,然后在...

2016-05-28 22:27:18 10297 3

原创 拆轮子之Fish动画分析

概述最近发现一个很好玩的动画库,纯代码实现的https://github.com/dinuscxj/LoadingDrawable,这个动画效果使用drable来实现,觉得很好玩,先分析这个Fish动画(上面是鱼,下面是ghosteye,可是我看半天看不出哪里像 ghost ╮(╯▽╰)╭)。类图...

2016-05-24 22:46:36 3482 4

原创 动态菜单

动态菜单先上效果图比较简单,主要就是属性动画的使用和坐标角度的小细节。实现实现效果: 图标按照路径一路缩放渐变过来即可。核心代码 /** * Item开启动画 * * @param btnItem * @param index * @par...

2016-05-15 22:01:20 5466 0

原创 拆解轮子之XRecyclerView

简介这个轮子是对RecyclerView的封装,主要完成了下拉刷新、上拉加载更多、RecyclerView头部。在我的Material Design学习项目中使用到了项目地址,感觉还不错。趁着毕业答辩还有2个星期,先把这个轮子拆了看看,这个项目地址在XRecyclerView,先贴个效果图,更多效...

2016-05-11 11:38:07 27058 18

原创 MaterialDesign学习项目

概述该项目主要用来学习Material Design Support Library和一些android其他技术,也借鉴了网上一些其他优秀的学习资源。该项目目前主要分为俩大部分(后期可能会有一些增加): 解析干货集中营的开放API,实现一个简单的干货客户端 随时随地掌握技术最新动态 有趣的搞笑图片...

2016-04-29 11:10:48 3632 2

原创 高仿qq健康

概述学习别人的代码,在此基础上 优化代码结构 增加动画 要点记录 通过mRatio参数,让宽高始终是一个比例 贝塞尔曲线手动画矩形圆角 画虚线 根据基准点绘制文字 属性动画的使用 画笔宽度的自适应 源码地址:源码传送门参考:http://www.jianshu.com/p/740c64ba15ac#

2016-04-20 23:15:19 1642 0

原创 属性动画基础之ValueAnimator

概述属性动画是谷歌在android3.0(API level 11)时候给我们带来了属性动画,真正意义上带来了”动画“,以前的帧动画也就4中效果的组合(旋转、淡入淡出、放大缩小、平移),而且只是表面的动画,最经典的比如,把一个button按钮移动到另一个位置,然后去点击,一点反应都没有,但是点击原...

2016-04-15 15:05:34 720 0

原创 android动画基础之Animation

概述最近总结一下android的一些东西,毕竟基础不牢地动山摇。本篇主要涉及Animation,对Tween和Frame动画做些总结。TweenTween动画即补间动画,主要主持4种效果,缩放、透明度变化、旋转、平移,也可以组合起来使用(set/AnimationSet),在xml中对应的标签和j...

2016-04-13 18:47:42 901 0

原创 UML类图简介

概述设计模式中常常使用UML来表示类与类,类与接口之间的关系,UML类图是设计模式入门必备的技能,感觉各种关系比较多,这里做一下总结。类与接口的表示类与接口通常是一个矩形框表示,一般分为3层,第一层显示类的名称,如果是抽象类则类名用斜体表示。第二层代表类的特性,通常是字段和属性,第三层是类的操作,...

2016-04-12 17:36:16 788 0

原创 java反射

概述在android中很多开源框架都用到了反射,比如eventbus等,掌握好反射对以后进行更深层的开发是大有好处的。 Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类; 在运行时构造任意一个类的对象; 在运行时判断任意一个类所具有的成员变量和方法; 在运行时调用任意一个对...

2016-04-05 19:06:49 620 0

提示
确定要删除当前文章?
取消 删除