- 博客(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关注的人