自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(58)
  • 资源 (4)

原创 android的组件化详解(CC框架源码剖析)

说到组件化开发,咱们先聊聊三个问题。第一个问题:什么是组件化?组件化这三个字顾名思义就是将一个项目拆成多个项目,也就是说一个项目由多个组件组成,就比如一辆汽车,你可以把它拆分成发动机、底盘、车身和电气设备等四个模块;又比如一架飞机你可以把它拆分成机身、动力装置、机翼、尾翼、起落装置、操纵系统和机载设备等7个模块,那么你在开发项目的时候是否也应该把你的项目根据业务的不同拆分成不同的模块,如果不同的模...

2018-04-14 16:04:00 5831

原创 Android Architecture Components应用架构组件源码详解(基于1.0以上)(第二篇ViewModel和LiveData)

熟悉mvp模式的小伙伴应该都清楚,m->Model,v->View,p->presenter, p层调用model层的业务处理,将结果通过接口返回给View层,而此处所介绍的ViewModel用法有点类似与p层,只不过你要把业务处理放在这个ViewModel中,那么它就不那么像p层了,反正设计模式在于你怎么用,灵活运用,可以创造很多类似,但又超过类似。假如ViewModel中写入...

2017-11-29 14:56:13 3625 4

原创 Android Architecture Components应用架构组件源码详解(基于1.0以上)(第一篇生命周期监听分离LifecycleObserver和LifecycleOwner源码详解)

俗话说工欲善其事必先利其器,研究源码前首先得熟悉这个架构组件怎么用,还好官方文档介绍详细官网介绍,官方项目例子官方例子看截图,浅蓝色字体部分就是今天文章要讲的内容LiveData、ViewModel、LifecycleObserver、LifecycleOwner这四个类的使用以及源码分析,利用好这几个类可以实现ui和data的

2017-11-28 15:19:39 5421

原创 android的Jetpack的navigation原理详解

还没有用过navigation的小伙伴赶紧来用它,实在是太

2020-07-22 20:05:56 186

原创 是时候了解android11的权限变化

单次授权在 Android 11 中,每当应用请求与位置信息、麦克风或摄像头相关的权限时,面向用户的权限对话框就会包含仅限这一次选项。如果用户在对话框中选择此选项,系统会向应用授予临时的单次授权。然后,应用可以在一段时间内访问相关数据,具体时间取决于应用的行为和用户的操作:当应用的 Activity 可见时,应用可以访问相关数据。 如果用户将应用转为后台运行,应用可以在短时间内继续访问相关数据。 如果您在 Activity 可见时启动了一项前台服务,并且用户随后将您的应用转到后台,那么您的应

2020-07-04 21:09:59 379

原创 flutter动画原理详解(AnimationController、CurvedAnimation、Tween、Curve)

flutter动画类包括以下几种:AnimationController:动画控制器,写动画必有它,例如启动动画controller.forward()。Animatable:根据给出的开始值和结束值用来计算动画的真正的值(Tween就是它的子类)Animation:用来监听动画的状态(AnimationContrller是它的子类)addListener和addStatusListenerCurve:动画插值器(用来实现动画的值的变化,例如计算出动画的当前值,将它当做x值放入函数

2020-05-09 19:34:54 225

原创 Flutter路由源码(Navigator原理)详解

Navigator.of(context).pushNamed用flutter开发界面最离不开的就是路由器,你只要需要跳转到其他界面就需要路由功能,而flutter的ui组成全部都是widget,在布局的时候我们没有用路由的小部件(Navigator),那么它是怎么起到作用的呢,肯定是隐藏在我们用的根部件里面,一般我们布局的根部件为MaterialApp小部件,MaterialApp小部件的...

2020-05-07 20:54:03 400

原创 flutter的Provider状态管理原理详解

Flutter的Provider是专门为Flutter处理状态而生,RenderObject树的重新渲染最原始的做法就是调用SetState方法,而Provider可以让你注重于数据逻辑的的改变,而无需关心RenderObject树的主动渲染,这不就是类似于mvvm模式,只要数据变化了,view树就会重新渲染该渲染的部分,而不需要咱们主动调用渲染。下边先来看看Provider相关类怎么用,这里...

2020-05-01 15:23:07 812

原创 flutter_redux(redux状态管理源码详解)原理详解

如果要使用redux,那么首先得创建一个Store,顾名思义用来储存数据的类,它的泛型需要自己定义真正保存数据的类放在这里如下: final store = Store<SearchState>( searchReducer, initialState: SearchInitial(), middleware: [ // The follo...

2020-04-29 17:48:59 200

原创 Flutter的setState原理详解

用Flutter的开发的小伙伴知道,一般你想动态的修改小部件的的状态的话,那么你要实现小部件继承StatefulWidget,而不是StatelessWidget,这和ReactNative的方式如出一辙,你想改变组件的属性,只要调用SetState方法就可以了,至于SetState方法如何实现的,笔者接下来将会一一分解。void setState(VoidCallback fn) {...

2020-04-13 16:02:49 548 2

原创 flutter事件分发原理详解

不管是android,ios还是rn,js,一涉及到手势都会有事件的分发处理,像你在手机上点击了某个控件,手机是怎么交个这个控件处理的,同一时间内的事件是被不同的控件一起消耗还是被一个控件单独消耗,同时消耗会不会产生事件点击、滑动、抬起等的混乱。像典型的android的事件分发,它是从当前正在交互的Activity开始的,然后传递给view树的根View,再传到你自己布局的根view,开始一层...

2020-04-11 14:34:44 446

原创 Flutter的UI渲染流程源码讲解

本篇文章意在讲解Flutter测量、布局和渲染和android的区别,了解了布局的渲染自己在flutter的自定义控件中才能如鱼得水,首先先从整个渲染的入口Mian.dart的main方法的runApp方法void runApp(Widget app) { WidgetsFlutterBinding.ensureInitialized() ..scheduleAttachRoot...

2020-04-08 18:03:10 274

原创 Kotlin布局框架anko源码刨析

有段时间没有写贴子,不管再怎么学好记性不如烂笔头,有空还是将脑袋里的东西记录一下的好,省的过个几个月不用又忘了。anko作为kotlin开发android来说加入了很多简洁的语法,最注目的就是直接在代码里面写控件布局,而且看起来还很简洁像极了ios,android终于成熟起来了,越来越像ios开发了,anko做为kotlin的开发的框架将kotlin的简洁的语法发挥的淋漓尽致。如果你写代码...

2020-03-18 17:52:28 125

原创 再看EventBus之(EventBus架构、源码刨析)

网上有关EventBus的解析很多,为什么笔者要再写一次呢?第一:笔者很早以前就研究过这方面的源码,但是时间长了就忘了,所以在此用于记录;第二:网上很多写的EventBus模式源码介绍都不对,所以笔者在此纠正一下,大家共勉学习一下。第一:EventBus这个类采用了外观模式(也就是门面模式,用户只要通过EventBus操作所有的功能,而没有必要直接和里面的子功能的类打交道,也就是说EventB...

2019-09-30 17:04:29 72

原创 滴滴动态插桩DroidAssist源码详解

先来了解一下这个DroidAssist的能帮我们做什么?都有哪些功能呢?替换:把指定位置代码替换为指定代码 插入:在指定位置的前后插入指定代码 环绕:在指定位置环绕插入指定代码 增强: TryCatch对指定代码添加 try catch 代码 Timing对指定代码添加耗时统计代码 恩,功能确实挺强大的,咱们可以用它来实现动态的更改方法里的字节码,可以插入指定代码,比如打印...

2019-06-12 19:23:22 647

原创 android端自动检测文件句柄泄露问题(读写文件流 FileOutputStream 、FileInputStream忘了关闭)

不管是字节流还是字符流,用完之后不及时关闭的话,都会引起句柄的泄露,内存得不到及时回收。所以一般用她们的时候记得最后及时关闭,这是一种良好的编码规范。但当这个问题出现时咱们咱们检测呢,答案是有的,我们可以利用hook技术把原方法地址入口给替换成我们自己的hook地址,然后在自己的方法里实现计数功能,如果打开计数大于1,则存在泄露,将堆栈信息打印出来,因为open和close方法最后都是在so库里实...

2019-05-30 12:26:26 1008 1

原创 抖音灵魂出窍效果实现原理解析

目前实现视频特效都是用的opengles,不了解opengles的同学请自行学习,opengles在2.0以后出了着色器语言,顶点着色器和片元着色器,可以让开发者在Gpu渲染的时候实现对图形的颜色和形体的控制。不管是在录屏还是在播放视频,都可以通过EGL和Gpu产生关系将像素显示到屏幕上组成一张张绚丽的图像,或者直接用GLSurfaceView(封装好的EGL)。opengles顶点着色器...

2019-03-29 16:07:56 2561

原创 从源码角度理解Fragment的setUserVisibleHint方法的妙用

说到setUserVisibleHint的用法,网上有一大堆,这里简单介绍一下,在你切换Fragment的时候,不管Frament有没么有创建View,都会调用这个方法: @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisi...

2019-03-06 16:47:16 331

原创 Ndk系列之CmakeList常用内置命令用法详解

message命令:用途:​​​​用于输出打印信息。范例:message(“Hello World”)。include_directories命令:用途:引入某目录的所有的头文件,加载静态库或动态库的时候,使用时需要引入头文件。范例:include_directories( 目录/include/ )。set 命令:用途:用于设置属性值,(自定义属性值或内置属性值)为...

2018-12-17 11:12:43 291

原创 android分页框架Paging源码分析

如果你还没用过Paging的话,很正常,毕竟现在用的并不多,做为android的开发人员分页的做法我们习惯写一个自定义控件,下拉的时候刷新(请求接口的页数置为1),上拉加载更多(请求接口数据页数实现累加)。然而,一种新的框架出来,我们应该尽可能的去了解它的架构,吸取人家谷歌工程师的代码精华。好了,现在咱们先来了解一下怎么样用用这个分页库:第一步:引入分页库implementation...

2018-12-14 17:33:19 574

原创 从饿了吗框架Hermes探讨跨进程通信方案的思想

 谈到跨进程,你首先想到的就是AIDL技术,也就是android中传说中利用了Binder技术实现跨进程通信,当然你也可以用Messenger类实现跨进程开发简单粗暴,或者你感觉不过瘾,也可以直接继承Binder自己实现Binder扩展通信。不管你采用那种方案,你如果要在android种实现跨进程,你都需要实现一个Service,在onBind方法中返回你实现的Binder扩展类,然后调用...

2018-11-07 17:02:25 896

原创 android5.0协调布局CoordinatorLayout(第三篇BottomSheetBehavior源码详解)

在开始看源码之前,咱们先来重温一下RecycleView是怎么将触摸事件传到CoordinatorLayout问它消不消耗事件的!根据事件的分发机制是从Activity的(dispatchTouchEvent)事件开始传入给PhoneWindow的DecorView的(dispatchTouchEvent),传入口如下: public boolean dispatchTouchEvent(M...

2018-09-14 16:38:50 1301

原创 面试之为什么Handler会存在内存泄露

这两天面试被问到Handler的通信机制,这个问题还是很好回答的,Handler负责发送消息和在handleMessage方法中处理消息,它将消息发送给给消息队列MessageQueue,然后Loop不断从消息队列中取出消息调用handler的dispatchMessage方法,最后调用handleMessage方法交给handler来处理消息,如下: public void dispatc...

2018-08-29 22:43:18 803 2

原创 WorkManager用法详解

WorkManager是什么?它是谷歌提供的Architecture Components 架构组件的库中的其中一个库,WorkManager有什么用?官方解释如下:Note: WorkManager is intended for tasks that require a guarantee that the system will run them even if the app exit...

2018-07-31 17:59:58 2102

原创 适配android P

android的P到来,真是让我们这群开发android的程序员蛋疼了不少,因为它加入了不少限制,尤其是非SDK api使用的限制,妈的以后非sdk的api调用直接给你抛异常奥,听起来是不是很兴奋。很想说适配个屁啊,哈哈确实是适配个P官方适配文档下面来看一下保存非sdk有哪些后果吧,这里引用官方文档的图我去这么多异常,在android p系统手机出来后,你什么都没改的话,你的app也有可能随时崩溃...

2018-06-23 15:40:49 3925

原创 android的Bitmap缓存策略全面剖析第二篇(之Glide缓存策略)

上一篇咱们讲了ImageLoader的缓存策略,那么Glide的缓存策略相较于ImageLoader缓存有什么优势吗?它们之间有什么样的差别,或者说性能方面,那一个更好,注意咱们这里所介绍的缓存是不包括sd卡存储的。先来看一看Glide用了哪些缓存策略模式,如下:是不是少了点,没错和缓存有关的就这两个类,MemoryCache是缓存的接口,MemoryCacheAdapter和LruResourc...

2018-06-14 13:32:15 1498

原创 android的Bitmap缓存策略全面剖析第一篇(之ImageLoader缓存策略)

小伙伴们都知道,做一个app是少不了和图片打交道的,而不管是jpg还是png格式的图片,android的显示的时候最终都是将它们变换为Bitmap显示的,而Bitmap占用内存巨大,打个比方假如是ARGB_8888格式的Bitmap的话,每像素占用四个字节,占用的内存总共大小就是4*width*height,可想而知如果图片多的话,而引起的内存抖动肯定会引起界面卡顿的有没有,就算你牺牲一个颜色通道...

2018-06-13 15:40:29 333

原创 组件化开发之路由器模块详解(ActivityRouter源码详解)

    路由器的作用是什么?通俗的讲,路由器的作用就是一根网线满足多人上网的需求。而在开发中路由器模块的作用就是实现中转分发,也就是说将原来有关系的模块(有依赖的模块分开),产生一个中间的模块,让原来依赖的两个模块都去和路由模块交互,从而将原来两个有关系的模块拆分开,利如我现在在开发一个app,根据业务需求这里需要开发一个便民中心模块,但是进入这个模块肯定得先从主模块点击进去,这里如果有数据之间的...

2018-04-08 17:44:19 1620 1

原创 在OkHttp框架基础上打造客户端可控的缓存框架,带你彻底理解OkHttp的缓存功能模块

话说okhttp已经具备强大的缓存功能,我为什么还要改造它呢?虽然okhttp的缓存功能很强大,但是缓存功能是依赖响应头而设计的,如果服务端不给你提供响应头的话,那么这个框架默认是不会保存你请求的数据的,也就是说如果我在app端显示数据,想在网络差的情况下、或网络断掉的情况下能让界面快速显示从而提高用户体验的话,添加缓存是必不可少的,就像浏览器一样已经浏览了网页的话,第二次打开网页会很快,但是只是...

2018-03-01 16:57:22 310

原创 从腾讯VasSonic源码剖析到webview优化的思考

提到android的webView,我想大家对它都有点恨之入骨,因为它和ios的UIWebView的性能实在差的太远了,尤其在4.4以下,加载个页面慢的要死,出现白屏时间过长、没有网络的时候加载直接给你加载出内核自带的页面等等,如果对它不管的话体验实在是太差了,作为一个优秀的程序员,这些事情是无法忍受的,那么怎么才能让webview的加载速度变快呢,这得想一下到底是什么造成了h5界面加载慢,h5里

2018-02-27 11:00:43 3588 3

原创 美团热修复Robust源码庖丁解牛(第一篇字节码插桩)

如果你想对java编译后的class文件做一些手脚的话,市面上有供你选择的asm、javassist、aspectJ(aop面向切面编程)等等,一般修改class文件的用途有你想统计一些东西,例如app崩溃日志,做为程序员应该要懒,不想写统计的代码,这个时候利用编译器改变class的方式,来选择是否上传错误信息。记得代码中你总想打印一些信息,比如路径、又或者是接口api为你返回的一些信息、又如你判...

2018-01-15 15:13:24 2212

原创 LightSun/android-databinding(第二篇事件绑定)源码剖析与思考

上一篇中大体的讲解了一下属性绑定的套路LightSun/android-databinding(第一篇属性绑定)源码剖析与思考,这一篇来看一下事件绑定的套路,怎么通过xml的属性配置让DataBinding自己识别是什么事件,在View层不见一句OnClick、OnTouch等等事件,确可以分隔离操纵它。先来看一下xml的OnClick事件的配置 mainHanlder.onClickCh

2018-01-05 15:03:41 369

原创 LightSun/android-databinding(第一篇属性绑定)源码剖析与思考

自从谷歌推出DataBinding框架之后,MVVM开发模式也在android的端慢慢的兴起,用DataBinding框架可以省去UI和数据绑定的不少功夫,通俗的讲就是少写很多代码,并且结构看起来清晰,并利于维护,就是降低耦合,反正程序员最终的道路就是解放双手提高生产力,当然最终双手解放了,生产力上去了,也就提高了失业率。那么问题来了,android-databinding怎么帮我们进行数据绑定的

2018-01-04 16:39:39 457

原创 alibaba/Virtualview-Android(第一篇View映射生成)源码剖析和思考

在开篇之前,大家开发中应该都会有这么一种思考吧,怎么样让你的布局变成动态的?何为动态?即是在不发表新版本的前提下,让你的界面在用户看来变了,然而他们没有更新app,也许你会说可以直接h5吧,好这种方案的确可行,但是如果h5过多,那还用app开发人员干嘛,不好,是不是感觉饭碗被抢了,当然你也可以把h5也学了,抢他们饭碗,但是h5的速度毕竟赶不上原生的,那么有没有好的解决方案呢?好吧,现在插件化非常的

2017-12-28 16:45:53 1123

原创 alibaba/android_viewtracker源码详解

最近逛逛了阿里的github发现有这么两个小框架android_viewtracker和Virtualview-Android,android_viewtracker是用来监测点击事件,比如我想统计app每个界面的控件被点击次数,从而统计出那个界面被浏览的次数多,这里只是一个借鉴,统计app最常统计的是崩溃率、一天的启动次数、异常、活跃度、等等,当然统计这些东西,我们可以利用面向切面AOP技术比如

2017-12-26 13:27:35 861

原创 SVG-Android(资源替代详解)源码详解

上一篇文章讲到SVG-Android框架帮我们生成了svg.xml的渲染类来帮助我们画图,从而达到矢量图不失真的效果。如果没有看过上篇的小伙伴请先看上一篇博客SVG-Android(gradle插件生成器)源码详解,在生成好这些渲染类之后,只需要在在你的项目的Application中加入SVGLoader.load(this)加入这句代码,然后在控件上(在5.0以下系统)像使用普通的drable一...

2017-12-18 13:56:43 495

原创 SVG-Android(gradle插件生成器)源码详解

Google在android的5.0以后推出了支持显示svg格式的图片,svg是啥?官方解释就是不失真的图片格式,失不失真和像素密度以及图片的像素有关系,如果你自定义一个view,在onDraw方法里画图,你能看出来你所画的图片在不同手机上会产生失真吗?答案肯定是否定的,而Google就在这画图上动了手脚,所有的svg图片都可以用路径画出来,路径当然是path了,也就是说只要能转化为svg路径图片...

2017-12-16 15:52:38 559

原创 OpenGL ES(第一篇绘制方式) 学习

OpenGL ES入门确实有点困难,以我个人感觉是这个技术中包括太多以前没有接触过的名词,以及线性数学的知识,但是好在这个技术出了很长时间了,所以这方面的书籍很多,可以辅助我们看文档。好了现在正式进入OpenGL ES的世界,本文主要讲解基本图元画法的所有方式,在OpenGL ES的世界里基本图元只有点、线、三角形,不管画任何图形都是以这三种基本图元拼接,但是不管画基本图元的任何一种,它都有规定的

2017-12-12 15:18:02 2440 1

原创 xLog源码详解

xLog是什么呢?看名字你也大概能猜到它是日志打印类,android的自带日志类为Log,这个框架确命名为xLog,相比是加了很多特殊的功能吧!所以说研究框架源码不只是更好的运用框架,也要通过研究学习人家源码的“”秘密“,这里的秘密我指它为好的方面,也就是优点,它的这些优点是怎么写出来的,从而把这些优点变成自己的。那么先说一下xLog的优点:1、它可以打印xml、json格格式化的数据,也就是

2017-12-06 15:23:46 2312

原创 facebook的network-connection-class(测量移动端网络质量)源码详解

最近逛github,突然发现facebook居然写了个检测网络质量的框架,好奇心驱使那就研究一下吧。分析源码之前,先看一看官方给我们提供的例子效果:这个是faceBook官方为这个小框架提供的demo,点击Test按钮即可测出当前手机网络速度的质量,但是这里出现了一串英文EXCELLENT,什么鬼这表示的速度是什么,查询源码找到包含参数的这个枚举类public enum C

2017-11-21 16:52:08 2299

flex学习源代码

flex学习源代码

2013-06-21

java开发的bbs

基于javabean和jsp和jdbc的mvc模式开发的论坛

2013-02-18

四个SSH框架实战项目源码加笔记

四个SSH框架实战项目源码加笔记附带码

2013-02-18

ASM中文帮助文档

java修改字节码高效框架ASM中文帮助文档,学ASM看这一个文档就够了

2018-04-14

空空如也

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