自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 从mixin机制理解Flutter App启动

文章目录1-mixin机制1.1-前言1.2-mixin特性2-runApp启动2.1-binding初始化2.2-绑定根节点2.3-绘制热身帧总结1-mixin机制1.1-前言  转载注明出处:https://juejin.im/post/5efbf499e51d4534b979050c  mixin机制并非dart独创,在其他前端语言中也有很广泛应用。但对于一个刚开始看Flutter源码的客户端开发来说,各种mixin直接劝退,不得不先恶补下mixin。  mixin首要特性就是实现函数复用,所以

2020-07-01 16:08:37 931

原创 读源码-LeakCanary2.4解析

文章目录1-基本原理1.1-Reference & ReferenceQueue1.2-对象回收监听2-LeakCanary源码分析2.1-初始化2.2-Activity监听2.3-hprof文件解析总结本文基于LeakCanary版本:'com.squareup.leakcanary:leakcanary-android:2.4'1-基本原理  在开始LeakCanary源码分析前,先来了解下Refercence及ReferenceQueue,它们是LeakCanary实现内存泄漏监听的核

2020-07-07 10:10:26 817 2

原创 读源码-MVVM实现与原理分析

文章目录1-MVVM简介1.1-MVC & MVP & MVVM1.2-MVVM结构2-MVVM实现3-源码分析3.1-DataBinding3.2-ViewModel3.3-Lifecycle3.4-LiveData1-MVVM简介1.1-MVC & MVP & MVVMMVPMVVM与MVP结构类似,MVP也是通过Presenter将View与Model解耦。不过MVVM是基于观察者模式,viewModel不持有Activity/Fragment实例,数据更新驱

2020-06-17 19:40:33 418

原创 读源码-Retrofit源码解析

文章目录1-基本流程1.1-创建Retrofit实例1.2-创建请求接口2-总结本文基于Retrofit版本:com.squareup.retrofit2:retrofit:2.9.01-基本流程Retrofit框架其实可以理解为OkHttp的第一个Interceptor,对OkHttp的请求及结果进行处理,符合RESTful规范的一个框架,同时也支持通过RxJava实现响应式编程,通过一系列的封装使得OkHttp用起来更方便。本文重点解析Retrofit部分原理,至于其核心的OkHttp部分前面的

2020-06-12 21:24:12 525

原创 读源码-OkHttp源码解析

本文基于OkHttp版本,该版本是用Kotlin实现:com.squareup.okhttp3:okhttp:4.7.21-基本流程?OkHttp这个框架就不用过多介绍了吧,一句话概括就是对Socket编程的封装实现,方便实现网络通信。什么是Socket编程?Socket是TCP/IP协议的抽象实现,详情可以去看看:一篇文章带你熟悉 TCP/IP 协议-(一)String testUrl = "https://wanandroid.com/wxarticle/chapters/json";//@1

2020-06-10 11:09:29 477

原创 读源码-VirtualView源码解析

文章目录1-基本原理2-源码解析2.1-xml模板描述2.2-xml模板编译2.3-.out预解析2.4-.out解析构建组件2.5-数据绑定与事件处理1-基本原理VirtualView是天猫出品的组件级别的动态化方案,通过动态下发xml模板到客户端,客户端完成模板解析、数据绑定、事件处理等实现动态化。实际常用的应用场景如下:按照VirtualView SDK中的原生或拓展组件编写Xml模板,和Android中的布局xml类似将Xml模板解析为二进制文件.out,和Android中xml文件解析

2020-06-01 21:30:17 586

原创 读源码-Glide源码解析

文章目录1-初始化with()2-加载准备load()3-加载显示图片 into()4-Glide三级缓存机制5-总结本文基于Glide版本:com.github.bumptech.glide:glide:4.11.0Glide最常用的一行代码如下,也概括了Glide的初始化、加载图片(本地、缓存、网络图片)、绑定显示的流程。本文就从该行代码开启Glide的源码之旅。Glide.with(this).load(url).into(mainPic);1-初始化with()首先是Glide.with

2020-05-31 19:33:02 742

原创 读源码-ButterKnife源码解析

文章目录1-自定义注解处理器2-生成对应的className_ViewBinding.java3-流程总结本文基于ButterKnife版本:'com.jakewharton:butterknife:10.2.1''com.jakewharton:butterknife-compiler:10.2.1'1-自定义注解处理器java代码编译期,javac会调用java注解器来处理注解相关。先看下butterknife-compiler库中的核心ButterKnifeProcessor通过继承Abs

2020-05-28 15:41:04 365

原创 读源码-ARouter源码解析

文章目录1-初始化2-路由跳转3-@Interceptor拦截4-@Autowired参数注解1-初始化ARouter.init()开始,init方法的主要工作就是ARouter实例化,_ARouter的初始化。_ARouter是具体实现类。这里用到了外观模式,将所有API通过ARouter暴露,具体实现则交由_ARouter//ARouter.javapublic static void init(Application application) { if (!hasInit) {

2020-05-28 15:39:54 307

原创 读源码-EventBus源码解析

目录1-注册1.1-核心1.2-注册具体源码2-取消注册3-事件发送4-粘性事件1-注册1.1-核心注册主要原理就是EventBus的三个map变量的注册:subscriptionsByEventType | EventType为key,Subscription列表为ValuetypesBySubscriber | 注册对象subscriber为key,EventType列表为ValuestickyEvents | EventType为key,Event对象为Value字段说明:

2020-05-28 15:37:42 303

原创 VirtualView接入及开发环境搭建

文章目录VirtualView接入sdk接入xml开发工具需要工具编译工具界面实时预览工具VirtualView接入sdk接入引入aar依赖compile ('com.alibaba.android:virtualview:1.0.5@aar') { transitive = true}在application中初始化,提供全局VafContext及ViewManage...

2018-12-25 18:23:50 916

原创 item高度不同时Recyclerview获取滑动距离

前言最近遇到需求,要计算RecyclerView滑动距离,用提供的computeVerticalScrollOffset()方法得到的值不是很准确。是基于item的平均高度算得,如果列表中item高度一致可以用此方法。问题来了,我的应用场景是各item高度不一,这时就只能另找方法了。方法一:网上找的方法,用一个变量去统计,每次滑动的时候累加y轴偏移量。item插入\移动\删除的时候,需要手...

2018-11-08 15:01:13 1277

原创 自定义ViewPager指示器动效从分析到实现

准备工作  最近接到需求,要实现一个ViewPager的指示器。拿到视觉稿,就三个小点感觉分分钟的事。然而,仔细一看发现不简单啊,要实现顺滑切换,两种颜色自然过渡还需要体力。 * 对动效进行拆解分析  第一个点切换到第二个点时,第一个点往右缩短,第二个点往右增长;同时第一个点由红色平滑过渡到蓝色,第二个点反之。注:点的消长随手势方向,但消长的边有所不同大体思路  实现原理很简单,就是画图、

2017-12-27 19:38:04 964

原创 Weex的JS缓存实现

服务端将weex可用的模块打包成JS Bundle下发到客户端,JS Bundle没有分具体模块所以文件较大,每次进入页面去请求会产生多余的通信流量及下载时间。

2017-12-13 12:03:31 2928 23

原创 自定义TextView实现图文混排及自定义省略符号

实现图文混排    如上图需求,要实现上述图文混排有如下几种方法1-用SpannableStringSpannableString ss = new SpannableString("这是一间营业时间从午夜十二点到早上七点的特殊食堂"); int len = ss.length(); //获取Drawable资源 Drawable d = getResour

2017-09-08 20:14:48 1025 1

原创 Android 帧动画OOM问题优化

普通实现实现一个帧动画,最先想到的就是用animation-list将全部图片按顺序放入,并设置时间间隔和播放模式。然后将该drawable设置给ImageView或Progressbar就OK了。

2016-12-29 16:10:10 13032 5

原创 android群英传学习笔记-自定义ScrollView

自定义ViewGroup通常需要重写onMeasure()、onLayout()、onTouchEvent()方法。本文实现一个继承自ScrollView的自定义ViewGroup,监听手势添加一个惯性及回弹效果。1、首先重写onMeasure()方法来测量ViewGroup的子View,遍历ViewGroup的子View,并调用measureChild()方法进行测量。@Ov

2016-08-23 19:55:54 500

原创 Ultra-Pull-To-Refresh动态添加View不能正常显示BUG解决方法

上文讲到Ultra-Pull-To-Refresh框架的简单示例,在动态添加PtrFrameLayout或者PtrClassicFrameLayout时踩到坑了,无法显示添加的子View。代码如下:PtrFrameLayout ptrLayout = new PtrFrameLayout(this);ptrLayout.setLayoutParams(new PtrFrameLay

2016-08-12 18:02:06 1543

原创 android-Ultra-Pull-To-Refresh实现下拉刷新WebView

本文使用的是功能强大的开源项目android-Ultra-Pull-To-Refresh,支持ListView、GridView、WebView、TextView等多种场景,下面在AS中做个下拉刷新WebView小例子入门。android-Ultra-Pull-To-Refresh开源库地址https://github.com/liaohuqiu/android-Ultra-Pull-To

2016-08-09 18:45:34 2396

原创 Android群英传学习笔记-AM&PM

1、系统信息获取android.os.Build--系统编译时大量的设备、配置信息    包括Build.BOARD//主板  BRAND//定制商  DEVICE//设备参数  DISPLAY//显示屏参数  PRODUCT//手机产品名  VERSION.SDK_INT//版本号String brand = Build.BRAND;SystemPro

2016-08-03 09:53:50 380

转载 带你学开源项目:OkHttp--自己动手实现okhttp

本文转载于:带你学开源项目:OkHttp--自己动手实现okhttp一、开源项目 OkHttp在Android、Java开发领域中,相信大家都听过或者在使用Square家大名鼎鼎的网络请求库——OkHttp——https://github.com/square/okhttp ,当前多数著名的开源项目如 Fresco、Glide、 Picasso、 Retrofit都在使用OkHtt

2016-07-22 19:16:42 1892

原创 android群英传学习笔记-自定义TopBar

1、attrs.xml自定义控件数据xml文件declare-styleable name="TopBar">        attr name="title" format="string"/>        attr name="titleTextSize" format="dimension"/>        attr name="textColor" format="color"

2016-07-20 19:55:19 591

原创 DialogFragment笔记-调用广播通知界面更新

方法一:onCreateView创建Dialog利用自定义的xml布局文件实现Dialog1、创建布局文件2、继承DialogFragment重写onCreateView方法onCreateView中调用getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉Dialog标题栏

2016-07-14 18:41:23 1309

转载 Native与H5交互的那些事

转载于http://zhengxiaoyong.me/前言Hybrid开发模式目前几乎每家公司都有涉及和使用,这种开发模式兼具良好的Native用户交互体验的优势与WebApp跨平台的优势,而这种模式,在Android中必然需要WebView作为载体来展示H5内容和进行交互,而WebView的各种安全性、兼容性的问题,我想大多数人与它友谊的小床已经翻了,特别是4.2版本之前

2016-07-10 17:16:59 2573

转载 MD5、RSA、DES加密算法原理解析

文章转自:http://www.iplaysoft.com/encrypt-arithmetic.html    MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。    MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个

2014-12-24 10:54:04 822

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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