自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 布局原理与资源加载原理分析

布局原理我们要学习布局原理,就是要明白UI线程是怎么工作的,而在Android中,ActivityThread就是我们常说的主线程或UI线程,ActivityThread的main方法是整个APP的入口。因为我们学习的只是布局的原理,所以我们的代码只关注跟UI相关的代码。ActivityThread首先来看performLaunchActivity()方法,这是activity启动的核心方法。private Activity performLaunchActivity(ActivityClientR

2021-07-14 09:19:28 128

原创 插件化一键换肤技术实战

插件化换肤技术,就是通过插件的方式,加载外部资源文件,无需更新App就可以实现换肤,具有耦合低,入侵小的特点。总结起来就是。更好的用户体验,无闪烁换肤架构扩展和维护方便,入侵性小,低耦合插件化开发,任何APP都是你的皮肤包立即生效,无需要重启APPgithub项目地址 https://github.com/Rainpler/EnjoySkin为实现插件化换肤的技术,需要先了解布局原理与资源加载原理,这些都在上一篇中进行了分析。整个插件化框架共分为三个部分,一个是主App,一个是换肤框架,另一

2021-07-14 09:18:49 381

原创 RecyclerView实现吸顶效果

我们在开发中,经常会遇到RecyclerView实现分组和吸顶的需求,就如下图所示。为了达到这样的效果,我们可以使用ItemDecoration来实现。ItemDecoration 允许应用给具体的View添加具体的图画或者layout的偏移,对于绘制View之间的分割线,视觉分组边界等等是非常有用的。RecyclerView.ItemDecoration,该类为抽象类,官方目前只提供了一个实现类DividerItemDecoration。public abstract static class I

2021-07-13 15:47:56 1712

原创 JVM内存管理之深入理解对象

深入理解对象我们知道,Java是一门面向对象设计的语言,面向对象的程序设计语言中有类和对象的概念。类就是具备某些共同特征的实体的集合,它是一种抽象的数据类型,它是对所具有相同特征实体的抽象。在面向对象的程序设计语言中,类是对一类“事物”的属性与行为的抽象。而对象是类的具体的个体。比如,小王是Person类的一个对象。Person可能存在无数个对象(就好像地球上存在数十亿人一样)。而一个对象的创建,包括两个过程:初始化和实例化。虚拟机中对象的创建过程下面是对象创建过程的一个图示:我们通常使用new

2021-03-10 19:02:08 171

原创 Android编程基础之序列化

序列化将数据结构或对象转换成二进制串的过程。序列化方案Serializeble Java序列化方案在Java中使用Serializeble有两种方法,一种是实现Serializeble接口,另一种是实现Externalizable接口,它继承自Java.io.Serializeble类。我们观察源码可以发现,Serializeble接口内部是没有实现的。public interface Serializeble {}实际上,Serializeble就相当于是一个flag标识,使用的时

2021-03-09 09:34:47 129

原创 Java虚拟机之内存管理

JVM什么是JVMJVM全称为Java Virtual Machine,就是Java虚拟机。我们的Java程序,经过javac编译之后,会生成Java字节码,通常是.class、.jar等,JVM把字节码翻译之后,就会生成操作系统能识别的机器语言。JVM有一个很重要的特性,那就是跨平台,在我们下载JDK的时候,就会有相应平台的JDK版本,不管是Windows,Linux还是Mac,都有其适配的JVM,使用不同平台的jdk,JVM就能生成在该平台可以运行的机器代码,同一个HelloWorld程序,在上面运

2021-03-09 09:33:54 127

原创 Java编程基础之I/O

我们为什么要学习Java I/O?在对象序列化、Json解析、XML解析、zip压缩处理的时候,均需要以I/O作为基础,这些都需要很扎实的Java基础。Java I/O 概要设计我们在I/O中经常能看见这样的使用方式:DataOutputStream out =new DataOutputStream( new BufferedOutputStream( new FileOutputStream( new File(f

2021-03-09 09:33:07 118

原创 AQS底层原理、运用和volatile详解

AbstractQueuedSynchronizer什么叫做AQS?从名字可以看出,AQS就是抽象队列同步器,是用来构建锁或者其他同步组件的基础框架。它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。并发包的大师(Doug Lea)期望它能够成为实现大部分同步需求的基础。AQS使用方式和其中的设计模式AQS的主要使用方式是继承,子类通过继承AQS并实现它的抽象方法来管理同步状态,在AQS里由一个int型的state来代表这个状态,在抽象方法的实现过程中免不

2021-02-20 11:11:05 555

原创 阻塞队列和线程池原理

阻塞队列队列队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。在队列中插入一个队列元素称为入队,从队列中删除一个队列元素称为出队。因为队列只允许在一端插入,在另一端删除,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。什么是阻塞队列阻塞队列是在队列的基础上实现的

2021-02-19 16:14:39 505

原创 并发基础知识补全和CAS基本原理

并发基础知识补全Callable、Future和FutureTask在前文(线程基础、线程之间的共享与协作)中提到过中,新启线程的方式只有两种,一种就是扩展自Thread类,然后重写run()方法,另一种就是实现Runnable接口,实现run()方法。那么Callable接口这种方式,又是怎么回事呢。我们先来观察Thread类中的构造方法,并没有可以接受一个callable这种参数的构造方法。我们使用Callable的时候,首先要把它包装成FutureTask,而它又实现了RunnableFutur

2021-02-04 18:03:35 127

原创 线程的并发工具类

Java 下多线程的开发可以我们自己启用多线程,线程池,除此之外,Java还为我们提供了Fork-Join、CountDownLatch、CyclicBarrier等并发工具类。掌握并使用它们,有助于我们在进行并发线程开发的过程中,更加得心应手。Fork-JoinFork-Join是一个使用多线程的并发工具类,可以让我们不去了解诸如Thread,Runnable 等相关的知识,只要遵循forkjoin的开发模式,就可以写出很好的多线程并发程序,分而治之forkjoin 在处理某一类问题时非常的有.

2021-02-02 16:49:50 131

原创 线程基础、线程之间的共享与协作(2)

ThreadLocal辨析与Synchonized的比较ThreadLocal 和 Synchonized 都用于解决多线程并发访问。可是 ThreadLocal 与 synchronized 有本质的差别。synchronized 是利用锁的机制,使变量或代码块 在某一时该仅仅能被一个线程访问。而 ThreadLocal为每个线程都提供了变量的副本,使得每个线程在某一时间访问到的并非同一个对象,这样就隔离了多个线程对数据的数据共享。ThreadLocal 的使用ThreadLocal 类接口很简单

2021-02-01 17:37:30 95

原创 线程基础、线程之间的共享与协作(1)

毫不例外,进程与线程会时常伴随着我们在在我们的日常开发中。为了加深对线程与进程理论知识的学习,本文特做记录。进程与线程进程我们都知道计算机的核心是CPU,它承担了所有的计算任务,而操作系统是计算机的管理者,它负责任务的调度,资源的分配和管理,统领整个计算机硬件;应用程序是具有某种功能的程序,程序是运行于操作系统之上的。进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义.

2021-02-01 17:36:49 197

原创 Retrofit中的注解、反射与代理模式

Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装,网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责网络请求接口的封装,其内部实现实际上是使用了代理模式,为了更好的学习Retrofit框架,我们先从代理模式开始。代理模式代理模式,就是为其他对象提供一种代理以控制对这个对象的访问。如果在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问)

2021-01-25 19:51:32 273

原创 Java高级语言特性之泛型

Java高级语言特性之泛型Java泛型(generics)是JDK 5中引入的一个新特性,泛型提供了编译时类型安全监测机制,该机制允许程序员在编译时监测非法的类型。使用泛型机制编写的程序代码要比那些杂乱地使用Object变量,然后再进行强制类型转换的代码具有更好的安全性和可读性。泛型在java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的应用。为了方便介绍,本文从以下几个方面来展开:为什么我们需要泛型泛型类、泛型接口、泛型方法如何限定类型变量泛型使用中的约束和局限性泛型类

2021-01-20 12:01:38 168

原创 RxJava设计模式与原理

标准观察者设计模式RxJava是一种特殊的观察者模式,首先我们先来看标准的观察者设计模式。在标准观察者模式中,存在两种对象,一种是观察者,一种是被观察者,“被观察者与“观察者之间是一对多的关系。当被观察者发出通知改变的时候,观察者才能察觉到。Observerable.javapublic interface Observerable { private List<Observer> observers = new ArrayList<>(); public v

2021-01-19 11:49:36 743

原创 RxJava 应用与原理

ReactiveX是Reactive Extensions的缩写,一般简写为Rx。RxJava 在 GitHub 主页上的自我介绍是 “a library for composing asynchronous and event-based programs using observable sequences for the Java VM”(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库)。这就是 RxJava ,概括得非常精准。生活中的例子:起点(分发事件(PATH.

2021-01-15 11:23:34 232

原创 Java高级语言特性之注解

注解的定义Java 注解(Annotation)又称 Java 标注,是 JDK1.5 引入的一种注释机制。注解是元数据的一种形式,提供有关于程序但不属于程序本身的数据。注解对它们注解的代码的操作没有直接影响。注解本身没有任何意义,单独的注解就是一种注释,他需要结合其他如反射、插桩等技术才有意义。如何定义一个注解@Target({ElementType.TYPE})@Retention(RetentionPolicy.SOURCE)public @interface Example {

2021-01-13 17:40:13 151

空空如也

空空如也

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

TA关注的人

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