自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 资源 (4)
  • 收藏
  • 关注

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

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

2018-04-14 16:04:00 7841

原创 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 3955 4

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

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

2017-11-28 15:19:39 6161

原创 谈一谈如何加快android的项目的编译速度

随着android的组件化的到来,一个项目后期功能越来越多,模块拆分的越来越多,作为android的开发的小伙伴就不得不面对运行一下android项目可能需要5,6分钟甚至10几分钟的等待期,开发时间都浪费在编译上了,你说烦不烦呢!那么怎么解决这个困境,总不能就这么一直凑合着吧,反正也没太大影响开发,只是速度慢了一点而已。

2023-08-21 11:24:30 859

原创 是时候适配android14了

android14适配,是时候适配android14了

2023-06-21 12:16:28 3930

原创 Arouter源码系列之拦截器原理详解

Arouter源码详解,Arouter拦截器原理详解

2022-09-01 17:18:11 1464 1

原创 XBanner源码详解

XBanner作为经典的轮播器,相比大多数人都用过,它即可以作为图片广告轮播,又可以一页展示多图,还可以自定义子View,可谓是用法多多。如果想自己写一个轮播图只需实现三步就可以:1、第一步既然可以轮播那么现成的左右滑动就选ViewPager或ViewPager2 2、轮播的点或者数字其他样式怎么放,这个就需要动态的添加控件,形状完全交给用的人来控制,这只需要声明一个横向线性布局动态添加ImageView即可。3、就是实现自动切换了,搞一个Handler每隔几秒切换ViewPager的位置即可,至于几秒全部

2022-06-23 11:01:50 737

原创 RecyclerView源码第四篇(LinearSnapHelper和PagerSnapHelper详解)

LinearSnapHelper和PagerSnapHelper源码详解

2022-02-08 16:21:46 3321

原创 ViewPager2源码详解

ViewPager2源码详解

2022-01-29 11:35:17 1705

原创 是时候了解android12系统适配了

是时候了解android12系统的适配了

2021-11-23 16:00:24 1495

原创 Jetpack WorkManager原理解析

SystemAlarmService先来说一下WorkManager到底是干嘛的?谷歌为啥要在Jetpack组件库里面加入WorkManager,从表面意思可以理解它为工作管理器,也就是说是用来处理任务的可靠方式,比如我想在充电的时候处理一些事情,比如我想在电量充足的情况下处理一些事情,比如我想在网络连接的时候处理一些事情,又比如我想在连上wifi的时候处理一些事情,又比如我想在内存不足的时候处理一些事情。当然这些方式你用别的方法也可以实现,比如监听网络连接然后去处理事情,但是android的碎片化严重,明

2021-11-16 11:23:53 2104

原创 从源码角度看Dialog和DialogFragment区别

DialogFragment继承自Fragment,原本以为弹窗就是个Fragment,看过资源后没想到它里面还有一个Dialog,真的是很惊喜和很意外,那么它就是个Dialog,官方为啥建议用DialogFragment呢?是不是有毛病?先来看一下源码,DialogFragment显示的时候是调用的show方法,代码如下: public void show(@NonNull FragmentManager manager, @Nullable String tag) { mDi.

2021-09-11 13:07:20 1992

原创 蓝牙框架FastBle原理详解

搞过蓝牙开发的小伙伴都比较清楚,android4.3之后低功耗的蓝牙隐藏着很多坑,比如搜索设备如果频繁的调用startScan方法是会不回调搜索接口的,这是因为蓝牙底层做了优化;比如蓝牙关闭重新搜索搜不到设备或者连接不上设备有可能你没调用BluetoothGatt.close()方法,在蓝牙断开或主动断开的时候你必须调用close方法,因为手机蓝牙可以存在的连接的数量是有限制的,一般是最多存在多少个未回收的BluetoothGatt,不管它是连接状态还是断开未处理状态,反正再重新连接时就连不上了;蓝牙连接的

2021-08-14 15:18:24 5514

原创 优雅解决Rxjava内存泄漏问题autodispose源码详解

Rxjava想比大家基本都用过,它主要用了观察者模式,在使用的时候,例如在avtivity里面使用订阅了事件之后一定要在activity的onDestroy中取消订阅事件,不取消的话有可能存在内存泄漏的风险,例如被观察者里面的网络事件还没有处理完,用户直接点了后退。而autodispose框架就是专门用来优雅解决这种内存泄漏问题的方案。至于autodispose怎么用,大家直接看看github就可以了autodispose使用详解。ok,接下来直接写一个kotlin扩展方法来直接使用autodispos

2021-04-26 15:07:53 1748

原创 自定义键盘之禁止EditText点击弹出系统软键盘

在点击EditText的时候它会获得焦点并弹出软键盘,EditText继承成自TextView,只要和点击事件有关的那么必定会走view的分发事件并分发到onTouchEvent,代码如下所示:public boolean onTouchEvent(MotionEvent event) { final int action = event.getActionMasked(); if (mEditor != null) { mEditor.onTo

2021-04-07 17:12:18 1638 1

原创 Glide框架加载gif动态图优化

Glide图片库,相必大家用的不能再熟了,但是不知道小伙伴们有没有遇到gif加载卡顿,或者gif它变成了静态图,它不动了,这个是没法忍受的,glide全程都是java写的所以在加载gif的时候占用的内存就比较大,应用层渲染解析gif源文件相对于底层又比较慢,最终导致卡着不动了,这个是无法忍受的,所以怎么对gif这一块进行优化呢,既然进程的堆内存不能用太多,那么是否可以将gif的内存占用放在直接内存,也就是用c或c++去申请直接内存去保存gif产生的每一帧动态图,让后用c或c++底层语言去渲染gif文件。

2020-12-01 16:36:03 1922 1

原创 是时候告别SharedPreferences,Jetpack组件库中的DataStore原理详解

干android的小伙伴们都知道SharedPreferences偏好参数的用法,它主要是用来存储用户的一些信息,比如用户账号、用户设置中的个人喜好,用起来还不错,但是如果偏好参数保存的过多的,加载的速度就会变慢,因为每次重新启动app都需要将文件中所有的键值对内容读到内存中,这就影响了速度,另一方面,改变偏好参数的时候是修改的本地内存,所以进程是不共享的。你想在偏好参数中保存大量数据吗?那么是时候将你的项目中的偏好参数去掉了,是时候换成Jetpack组件库中的DataStore如图:再配合kotl

2020-11-30 17:15:30 1363

原创 android的Jetpack的navigation原理详解

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

2020-07-22 20:05:56 1755

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

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

2020-07-04 21:09:59 6296

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

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

2020-05-09 19:34:54 2704

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

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

2020-05-07 20:54:03 2126

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

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

2020-05-01 15:23:07 2620

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

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

2020-04-29 17:48:59 1384

原创 Flutter的setState原理详解

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

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

原创 flutter事件分发原理详解

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

2020-04-11 14:34:44 1513

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

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

2020-04-08 18:03:10 1337

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

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

2020-03-18 17:52:28 1158

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

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

2019-09-30 17:04:29 1111

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

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

2019-06-12 19:23:22 1860

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

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

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

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

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

2019-03-29 16:07:56 3982

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

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

2019-03-06 16:47:16 1609

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

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

2018-12-17 11:12:43 1177

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

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

2018-12-14 17:33:19 1156

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

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

2018-11-07 17:02:25 1321

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

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

2018-09-14 16:38:50 2541

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

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

2018-08-29 22:43:18 1536 4

原创 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 3554 1

原创 适配android P

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

2018-06-23 15:40:49 4192

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

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

2018-06-14 13:32:15 2188

ASM中文帮助文档

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

2018-04-14

flex学习源代码

flex学习源代码

2013-06-21

java开发的bbs

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

2013-02-18

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

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

2013-02-18

空空如也

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

TA关注的人

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