自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Glide缓存机制

Glide缓存机制Glide缓存机制Glide缓存机制简介内存缓存的取资源第一步:获取缓存key第二步:从弱引用缓存中获取loadFromActiveResources()第三步:从内存LruCache中获取loadFromCache()getEngineResourceFromCache()内存缓存的存资源Engine.load()onResourceReady()notifyCallbacksOfResult()onResourceReleased()磁盘缓存runWrapped()runGenerat

2021-07-30 08:58:14 316

原创 设计模式---单例模式

设计模式---单例模式单例模式单例模式的介绍五种写法及其优缺点1.饿汉模式2.懒汉模式3.双重检查模式/DCL静态内部类单例模式5.枚举类型总结单例模式分析**缺点:**单例模式单例模式的介绍保证一个类仅有一个实例,并提供用于一个访问它的全局访问点。单例模式是Java中最简单的设计模式,它的核心在于它能保持全局只有一个这个类的对象,如果外部想要去获取这个类的对象时,不能自己创建,只能通过这个类提供给外部的方法去获取,也正是这个原因,单例模式的类的构造方法一般都是私有的。五种写法及其优缺点1.饿

2021-07-28 21:41:30 242 1

原创 设计模式六大基本原则

设计模式六大基本原则设计模式六大基本原则一.单一职责原则二.开闭原则三.里氏替换原则四.依赖倒置原则五.接口隔离原则六.迪米特原则设计模式六大基本原则一.单一职责原则定义:就一个类而言,应该仅有一个引起它变化的原因。单一职责原则,字面意思比较明确就是单一,也就是干尽量少的事情,说白了就是一个类尽量只做一件事。对于一个类而言,应该仅有一个引起它变化的原因,简单来说,一个类中应该是一组相关性很高的函数、数据的封装。比如说我们要做一个图片加载器,不应该把所有的东西都写在一个类里面,应该各个功能独立出

2021-07-28 21:38:33 315

原创 Glide图片加载流程源码解析

Glide图片加载流程源码解析Glide图片加载流程源码解析Glide介绍与优势Glide是什么功能优势应用场景Glide整体运转流程with()流程with的重载getRetriever()获取RequestManagerRetriever对象Glide.get(context)build()RequestManagerRetriever.get()获取RequestManager对象1.获取Applicaition类型的RequestManager对象2.获取非Application类型的Request

2021-07-28 21:34:47 301

原创 EventBus使用及其源码解析

EventBus使用及其原理解析什么是EventBus?EventBus的使用创建一个发送事件类定义订阅者方法注册和注销订阅事件发送消息EventBus的源码导读Subscribe注解的使用两个全局变量map注册流程EventBus.getDefault()register(this)findSubscriberMethods()findUsingInfo()方法subscribe()方法注销流程unregister()unsubscribeByEventType(subscriber, eventType

2021-07-22 21:58:55 239 2

原创 ARouter的使用及其原理解析

ARouter的使用及其原理ARouter的使用及其原理ARouter介绍ARouter的简单使用ARouter的跳转原理注解&APT注解处理器RouteProcessorARouter Group xxxARouter Root xxxthis.parseRoutes(routeElements)方法categories(routeMeta)方法回到parseRoutes方法路由跳转第一种路由表加载方式LogisticsCenter.init()Postcard类第二种路由

2021-07-22 17:32:59 1860 1

原创 JNI:连接framework和native的桥梁

JNI:连接framework和native的桥梁JNI概述什么是JNI?JNI的创建时间JNI的数据类型转换基本数据类型的转换引用数据类型的转换JNI中的方法签名JNINativeMethodJNI中的JNIEnvMediaRecorder框架Java层的MediaRecorderJNI层的MediaRecordernative_initstart()小结JNI方法注册静态注册动态注册JNI概述什么是JNI?了解了Android系统架构之后,我们知道Android的系统架构中存在C++/C语言编写的

2021-07-19 16:04:32 1040 1

原创 Android系统架构的认识以及开机流程

安卓系统架构的认识以及开机流程Android系统架构应用层(App)应用框架层(Framework)系统运行库层(Native层)硬件抽象层(HAL)Linux内核层(Kernel层)Android系统的开机启动流程第一步:BootRom第二步BootLoader第三步.初始化Kernel第四步.init进程第五步.Zygote进程第六步.SystemServer进程第七步.Home ActivityAndroid系统架构Android底层内核空间以Linux Kernel作为基石,上层用户空间由Nat

2021-07-19 10:59:26 435 1

原创 Java集合源码之HashMap及相关问题

HashMap源码及相关问题HashMap简介HashMap的存储结构JDK1.8的HashMap源码HashMap的几个属性HashMap的构造方法空参构造一个参数的构造方法双参数的构造方法带Map类的构造方法HashMap中的table桶数组HashMap计算哈希值/索引的方法JDK1.7的hash算法JDK1.8的hash算法HashMap的put方法HashMap的树化treeifyBin方法HashMap的扩容resize()HashMap的get()方法JDK1.8 HashMap的源码总结

2021-06-21 23:06:07 115

原创 Java集合源码之ArrayList及相关问题

Java集合源码之ArrayListArrayList的简介ArrayList的内部属性ArrayList的三个构造方法ArrayList常用的API增1. add(E e)add(int index, E element)addAll(Collection<? extends E> c)addAll(int index, Collection<? extends E> c)小结删remove(int index)remove(Object o)removeAll(Collectio

2021-06-20 17:47:54 323

原创 一步一步讲解OkHttp最新源码

文章目录什么是Okhttp?Okhttp的使用流程Okhttp的请求流程源码分析:OkHttpClient()类异步请求流程异步请求的代码示例RealCall.enqueuecallStart()dispatcher.enqueue()promoteAndExecute()asyncCall.executeOn(executorService)AsyncCall.run()client.dispatcher.finished(this)小结同步请求流程同步请求的代码示例RealCal.execute()Ca

2021-06-02 18:49:34 686

原创 Retrofit2.0源码解读

Retrofit2.0源码解析Retrofit简介与Okhttp的区别Retrofit的使用流程:创建Retrofit实例源码解析Retrofit类Builder类BaseUrl方法GsonConverterFactory.create()方法addConverterFactory()方法build()方法总结创建网络请求接口的实例源码解析retrofit.create(xxx.class)方法Call call = xxxx.getCall()总结执行网络请求源码解析同步请求OkhttpCall.exec

2021-05-25 21:43:13 292 1

原创 Java关键字----Synchronized

Java关键字----Synchronized引入一.Synchronized的特性Synchronized的原子性Synchronized的可见性Synchronized的有序性Synchronized的可重入性二.Synchonized的不同用法三.Synchronized的底层实现Java对象头:Monitor对象四.synchronized的优化CAS(乐观锁策略)什么是CAS?CAS的比较交换(compare and swap):CAS的问题:锁优化——锁膨胀偏向锁轻量级锁重量级锁:几种锁的比较和

2021-05-13 15:50:06 138

原创 Rxjava------从1.0升级到2.0的变化

Rxjava从1.0升级到2.0的变化1. 观察者模式更新---完美支持背压策略2. 语法更新关于传入null参数关于Action的更新什么是Action?到Rxjava2.0的更新关于Func的更新关于Subscription的更新新增了doOnCanael3. 关于线程调度的更新参考文章1. 观察者模式更新—完美支持背压策略​ 在RxJava1 中 Observable 不能很好地支持 backpressure ,会抛出MissingBackpressureException。所以在 RxJava

2021-05-12 16:04:38 314

原创 Rxjava的背压策略

Rxjava的背压策略同步订阅和异步订阅1. 同步订阅2. 异步订阅异步订阅存在的问题(为什么引入背压策略)背压策略的概述1. 背压的定义2. 背压的作用3. 背压策略的原理背压的实现Flowable1. Flowable的介绍2. Flowable的特点3. Flowable与Observable的区别:3. Flowable的基本使用背压的使用1. 控制观察者接受事件的速度异步订阅情况同步订阅情况2. 控制被观察者发送事件的速度同步订阅情况:异步订阅情况采用背压模式策略:BackpressureStra

2021-05-12 15:18:04 1157 1

原创 Rxjava的操作符(3)------功能操作符和条件操作符

Rxjava的功能操作符和条件操作符Rxjava的功能操作符线程调度1. subscribeOn()2. observeOn()延迟操作1. delay()在事件的生命周期中操作1. do()错误处理1. onErrorReturn()2. onErrorResumeNext()/onExceptionResumeNext()3.retry()retryUntil()retryWhen()重复发生操作1. repeat()2. repeatWhen()Rxjava的条件操作符1.all()takeWhile

2021-05-12 15:06:36 257

原创 Rxjava的操作符(2)------组合操作符和过滤操作符

Rxjava的组合操作符和过滤操作符Rxjava的组合操作符组合操作符的作用组合多个被观察者1. concat()/concatArray()2. merge()/mergeArray()3. concatDelayError()/mergeDelayError()合并多个事件1. zip()2. combineLatest()3. combineLatestDelayError()4. reduce()5. collect()发送事件前追加发送事件1. startWith()/startWithArray

2021-05-12 15:05:12 191

原创 Rxjava的操作符(1)------创建操作符和变换操作符

Rxjava的创建操作符和变换操作符Rxjava的创建操作符1.基本创建 create()2. 快速创建(1)just()(2)fromArray()(3)fromIterable()(4)其他 empty,error,never等3. 延迟创建(1)defer()(2)timer()(3) interval()(4)intervalRange()(5)range()/rangeLong()Rxjava的变换操作符1. 变换操作符的作用2. 变换操作符的汇总介绍1. Map()2. flatMap()3.

2021-05-12 15:03:21 202 2

原创 Rxjava------初识Rx和Rxjava

文章目录什么是RxRx的特点函数响应式编程Rxjava的原理1. 扩展的观察者模式2. Rxjava的观察者模式流程Rxjava的基本使用分步骤实现Rxjava--基于事件流的链式编程两个使用例子什么是RxRx是一个编程模型,目标是提供一致性的编程接口,帮助我们更方便的处理异步数据流。Rx是一个使用可观察数据流进行异步编程的编程接口,ReactiveX结合了观察者模式,迭代器模式和函数式编程的精华。Rx的特点使用的是观察者模式简化代码:函数式风格:对可观察数据流使用无副作用的输入输出

2021-05-12 14:56:20 255 1

原创 Java关键字----volatile

文章目录volatile简介volatile的具体特点volatile的可见性实现可见性的大体步骤实现可见性的原理volatile的有序性&禁止指令重排序什么是有序性?什么是指令重排序?保证有序性的原理关于volatile的原子性问题volatile的单个读/写具有原子性volatile的复合操作不具有原子性volatile简介​ 通过一篇我的博客可以了解到synchronized关键字是阻塞式同步,在线程竞争激烈的情况下会升级为重量级锁。而volatile就可以说是java虚拟机提供的最轻量级

2021-05-12 14:50:25 131

原创 Handler消息机制(3)----ThreadLocal的内存泄漏

Handler消息机制(3)----ThreadLocal的内存泄漏内存泄漏是什么?ThreadLocal的内存泄漏分析ThreadLocal的正确使用方式总结内存泄漏是什么?内存泄露为程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光,内存泄漏的原因是类成员的生命周期大于类对象的生命周期,换句话说就是一个需要销毁的对象由于成员被外部引用而无法销毁。广义并通俗的说,就是:不再会被使用的对象或者变量占用的内存不能被回收,就是内存泄露

2021-04-26 21:33:55 134

原创 Android消息机制(2)----工作原理

Android消息机制(2)----工作原理ThreadLocal的工作原理ThreadLocal的简单实现ThreadLocal的内部实现ThreadLocalMapThreadLocal的set()方法ThreadLocal的get()方法消息队列的工作原理enqueueMessage方法next()方法Looper的工作原理Looper的构造方法:Looper的创建方法Looper的退出Looper的loop()方法Handler的工作原理Handler对象的创建Handler的发送消息Handler

2021-04-26 21:32:00 90

原创 Android消息机制(1)----简单介绍

Android消息机制(1)----简单介绍什么是Handler?Handler的消息机制为什么不能在子线程更改UIHandler的简单工作流程什么是Handler?​ Handler是Android消息机制的上层接口,所以开发者在开发过程中只需要和Handler交互即可。Handler的使用过程很简单,通过它可以轻松的将一个任务切换到Handler的所在的线程中去执行。很多人认为Handler的作用是更新UI,这的确没错,但是本质上来说,Handler并不是专门用于更新UI的,他只是常被开发者用来更

2021-04-26 21:28:42 140

原创 Room的学习总结

Room的学习总结什么是Room?Room的三个主要组件如何使用Room?Entity的使用:如何使用Database如何使用Dao注解@Insert插入注解@update更新注解@Delete删除注解@Query查询Room数据库的升级和迁移什么是Room?Room是google官方开发的对象关系映射(ORM)库框架,采用注解的形式。它能缓存相关数据,使用户在断网的情况下浏览相应内容,重新连接网络时,用户发起的内容更改都会同步到服务器。能将本地数据保存到数据库中,它提供了一个SQLite的抽象层(封

2021-03-14 22:22:53 945

原创 安卓一步一步搭建组件化

安卓组件化的搭建和基本功能的实现1.组件化是什么?1.1 了解组件化:1.2 组件化的基本结构:1.3 组件化的优点:2.组件化框架的搭建:2.1 第一步:搭建基础层2.1.1 创建config.gradle2.1.2 建立一个library模块作为基础层2.1.3 所有模块都要中都要添加基础层模块的依赖2.2 第二步:搭建组件层。2.2.1 为组件层模块创建不同的Manifest表单2.3 第三步:搭建app层2.4 检验搭建成果3. 组件间的activity等界面跳转3.1 ARouter介绍3.

2020-11-09 20:20:05 4158 12

原创 Android四大组件之服务

后台默默的劳动者----服务服务是什么Android多线程编程建立线程的3种方法2.1 线程的基本用法服务的基本用法服务的生命周期服务的更多技巧二级目录三级目录服务是什么服务是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要求长期执行的任务,它的运行不依赖于任何用户界面,即使程序被切换到后台,或者用户打开了另外一个应用程序,服务仍然可以保持运行。服务不是运行在一个独立的线程中,而是依赖于创建服务时所在的应用程序进程,当某个应用程序的进程被杀掉,所有依赖于该进程

2020-09-24 20:25:56 244

原创 Android之使用网络技术

网络技术WebView的用法1.1 什么是WebView1.2 WebView的使用使用HTTP协议访问网络2.1 使用HttpURLConnection发送HTTP请求2.1.1 HttoURLConnection的使用步骤2.2 使用OkHttp访问网络2.2.1 什么是OkHttp2.2.2 使用OkHttp的步骤解析XML格式数据3.1 使用Pull方式解析XML格式数据3.1.1 使用Pull方式解析的步骤3.2 使用SAX方式解析XML3.2.1 如何使用SAX方法解析解析JSON数据4.1 使

2020-09-24 01:18:32 250

原创 Android常用数据存储

Android的SharedPreferrences,SQLite数据库,Litepal存储功能。1 SharedPreferrences存储1.1 SharePreferences的存储特点1.2 SharePreferences存储方式1.3 利用SharePreferences获取数据2 SQL数据库存储2.1 什么是SQLite数据库2.2 相比于SharePreferences存储的优点2.3 如何使用SQL数据库存储2.4 对数据库进行操作2.4.1 创建数据库2.4.2 插入数据2.4.3

2020-09-22 21:30:58 385

原创 Android碎片的简单应用

碎片碎片的基本概念碎片是一种可以嵌入到活动当中的UI片段,让程序更合理的运用大屏幕空间,它拥有自己的布局和生命周期,比较常见的应用是在新闻标题列表当中,在平板中屏幕很大,如果只显示一个标题活动,很浪费空间,这时不如设计一个标题碎片,一个内容碎片,在活动中引入这两个碎片,会使屏幕空间看起来更舒适合理。碎片的基本创建和使用方式创建碎片所展示的布局。创建一个类继承Fragment。在类中的onCreateView方法中加载刚刚写的动态布局。把此碎片放置到准备加入的活动布局中。第一步 创建布

2020-09-21 21:31:18 397

原创 树和二叉树的相关知识

树和二叉树的相关知识树的基本概念树当中的基本术语二叉树的基本概念树的存储结构二叉树的遍历树的基本概念树(tree)是一种逻辑结构,它是由n(n>=0)个结点组成的有限集合。如果n=0,则他是空树。如果n>0,则其中存在唯一结点作为树的根结点(root)。除根结点外的其余元素被分为m(m>=0)个互不相交的集合T1,T2…Tm,每个子集本身也是一棵树,被称作根结点的子树。树当中的基本术语ABCDEFGHI祖先结点:指按照路径找到该结点所经过的结点,例如:A,B,D结

2020-05-24 19:21:47 280

空空如也

空空如也

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

TA关注的人

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