![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
理解
Gdeer
这个作者很懒,什么都没留下…
展开
-
Gradle 理解:configuration、dependency
概念什么是 dependencies 的 configuration?不同的 configuration 用来引用不同领域(或不同用途)的 dependencies。如:implementation、api、testRuntime。也就是 configuration 用来管理一批 dependencies。configuration 的继承与复合...原创 2020-03-12 22:23:23 · 8775 阅读 · 1 评论 -
Gradle 理解:Artifact
文章目录一、概念ArtifactPublishArtifactConfigurablePublishArtifactartifact {}artifact {} 中内容二、使用2.1 使用 archives2.2 使用自定义 Configuration2.3 使用 maven 插件2.4 使用 maven-publish 插件一、概念Artifact翻译为:构件、工件。代表的是一个领域对象...原创 2020-03-11 23:23:36 · 3361 阅读 · 0 评论 -
Java 中的锁:悲观锁、乐观锁、自旋锁、偏向锁、公平锁、可重入锁、独享锁...
文章目录一、悲观锁、乐观锁二、自旋锁、适应性自旋锁三、偏向锁、轻量级锁、重量级锁四、公平锁、非公平锁五、可重入锁、不可重入锁六、独享锁、共享锁一、悲观锁、乐观锁这里的锁,是一种多线程同步操作资源的方式,即悲观方式与乐观方式。悲观方式:加锁,如:synchronized、ReentrantLock乐观方式:不加锁,如:concurrent 包的原子类不加锁是如何保证多个线程...原创 2020-03-04 11:44:26 · 911 阅读 · 0 评论 -
Java 获取泛型对象的参数类型
文章目录一、类中有 class 信息二、父类中有 class 信息2.1 子类2.2 匿名子类三、持有者中有 class 信息由于类型擦除,java 中的泛型对象在运行时是不知道自己类型参数的类型的。但有几种特殊情况,能够获取泛型对象的参数类型:1、类中有 class 信息(类中有一个 Class 字段)2、父类中有 class 信息(父类是泛型类,并指定了参数类型)3、持有者中有 c...原创 2020-03-01 13:48:28 · 4455 阅读 · 0 评论 -
设计模式:工厂方法模式与抽象工厂模式
文章目录一、定义1.1 工厂方法模式1.2 抽象工厂模式二、类图三、实例3.1 Retrofit(2.5.0)3.2 Okhttp3(3.12.0)3.3 Glide(4.9.0)一、定义1.1 工厂方法模式工厂方法模式,又称工厂模式着重于方法,一个工厂只有一个方法,生产一种产品。(我称之为,单方法工厂模式)abstract class BaseFactory { abstra...原创 2020-02-25 21:51:42 · 180 阅读 · 0 评论 -
Retrofit 源码解析
文章目录一、名词解释二、使用三、原理四、问题一、名词解释Service:定义的接口类ServiceMethod:Service 中的方法Call<R>:参数类型是 R 的 Call,实际发起网络请求的类responseType(R):Call<> 的参数类型;如 Call<AClass> 的 responseType 为 AClassCallAdap...原创 2020-02-25 21:30:19 · 155 阅读 · 0 评论 -
类图的图示和关系说明
框中的符号+ public- private# protected~ default_ static斜体 抽象图示参考:维基百科类图、IBM 类图说明关联、聚合、组合:可以带箭头,也可以不带监听关系说明参考:知乎、掘金继承、实现很清晰,表示两个类的归属关系。依赖、关联、聚合、组合的界限并不清晰,它们表示两个类的引用关系,关系强弱:依赖 < 关联 < 聚合 ...原创 2020-02-22 20:42:43 · 373 阅读 · 0 评论 -
Kotlin 基础:泛型
本文介绍 Kotlin 中的泛型,可与 Java 中的泛型 配合食用。文章目录一、为什么要有泛型二、泛型的分类三、泛型的关键字3.1 T3.2 out3.3 in四、泛型类、方法的定义4.1 泛型类的定义4.2 泛型方法的定义五、泛型类、方法的使用5.1 泛型实现类5.2 通配类5.2.1 AClass\一、为什么要有泛型效率、成本减少样板代码的编写二、泛型的分类泛型类泛型方...原创 2019-10-25 16:03:14 · 256 阅读 · 0 评论 -
Java 基础:泛型
文章目录一、为什么要有泛型二、泛型的分类三、泛型的关键字3.1 T3.2 ?四、泛型类、方法的定义4.1 泛型类的定义4.2 泛型方法的定义五、泛型类、方法的使用5.1 泛型实现类5.2 通配类5.2.1 AClass<?>5.2.2 AClass<? extends BClass>5.2.3 AClass<? super BClass>六、代码示例一、为什么...原创 2019-10-25 11:16:23 · 431 阅读 · 0 评论 -
Git rev-list 详解
官网:https://git-scm.com/docs/git-rev-list本文基于官网介绍,结合实例解释 rev-list 的使用文章目录一、功能二、基本三、限制四、待续一、功能按时间倒序列出 commit(即 reverse-list)二、基本$ git logE - (HEAD -> master) addE (10/19/2019 13:31:19) <g...原创 2019-10-21 17:01:17 · 22587 阅读 · 1 评论 -
RxJava 理解:背压
RxJava GitHub 描述:当数据流通过异步发送,每一步用不同的速度发布不同的东西。为了避免压垮某一步,经常需要增加 buffer 或是筛选、丢弃数据,这就是背压,一种控制数据流的形式,让下游可以表达自己可接受的数量。这可以限制数据流的内存使用。在 RxJava 中,Flowable 支持背压, Observable 不支持背压。知乎上的问答:Backpressure 指的是在...原创 2019-07-07 13:52:01 · 502 阅读 · 0 评论 -
JetPack 组件之 DataBinding 详解
文章目录一、基础用法1.1 开启 DataBinding 配置1.2 布局中的属性1.2.1 数据对象1.3 代码中的绑定1.4 binding 表达式语法1.4.1 基础语法1.4.2 import、variables 和 include1.4.3 事件处理二、使用响应式数据对象2.1 响应式字段2.2 响应式集合2.3 响应式对象三、生成绑定类DataBinding 是谷歌官方推出的一个库,...原创 2019-06-14 18:35:52 · 475 阅读 · 0 评论 -
从 HelloWorld 来重新认识 MVC、MVP
明确的概念MVC、MVP 我们都知道,是一种架构模式。但它们的明确定义到底是什么呢,网上各式各样的流程图,各式各样的箭头指向,看得人头晕眼花,云里雾里。经过漫长的寻觅,我终于在这里找到一句话,解答了我的疑惑:不幸的是,MVC、MVP 都没有被广泛接受的定义。仔细想想,可不就是这样吗,MVC、MVP 只是一种思想,具体的实现方式当然不会完全一致,而这个思想唯一明确的、被广泛接受的概念只有一个,那...原创 2019-06-07 13:55:11 · 203 阅读 · 0 评论 -
类的简单名称、类全名、二进制名、全限定名、描述符
二进制名、全限定名,是一个东西。由于历史原因,class 文件结构中的二进制名格式,跟 java 语言规范中定义的二进制名格式有所不同。Java 语言规范中定义的二进制名格式,使用 . 作为分隔符。class 文件结构中的二进制名格式,使用 / 作为分隔符。例如,按照 Java 语言规范,Thread 的二进制名是 java.lang.Thread。但在 class 文件的描述符中使...原创 2019-05-29 09:40:19 · 4893 阅读 · 0 评论 -
正则表达式的不包含
^表示一个缝隙,每行的开头$表示一个缝隙,每行的结尾(?!X)表示一个缝隙从每行的每个缝隙(开头、结尾、两个字符间)开始向后匹配其中所有匹配不到 X 的缝隙^(?!X)表示一个缝隙从每行的开头缝隙开始向后匹配其中所有匹配不到 X 的缝隙(?!X).表示一个字符从 (?!X) 代表的缝隙向后填充一个字符((?!X).)*表示一个字符串零个或多个连续...原创 2019-09-11 11:46:33 · 9820 阅读 · 0 评论 -
一种更直观的二叉树非递归遍历方法
二叉树:class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}中序遍历:递归:public void printTreeMid(TreeNode...原创 2019-05-05 11:01:01 · 208 阅读 · 0 评论 -
Git 操作:rebase 详解(命令行)
官网:https://git-scm.com/docs/git-rebase初始 temp 分支节点状态:* c6d18af - (HEAD -> temp) d (2 分钟前)* d585e8c - c (3 分钟前)* c48536f - b (4 分钟前)* afa3558 - a (5 分钟前)* 7cdf608 - init (6 分钟前)rebase 当前分支修...原创 2019-07-25 14:04:29 · 2777 阅读 · 1 评论 -
Git 操作:rebase 详解(Android Studio)
官网:https://git-scm.com/docs/git-rebase初始 tmp 分支节点状态:rebase 当前分支修改当前分支的节点记录。如:删除节点、合并节点、修改节点的顺序等。光标选中 a,在 a 上右键选择 Interactively Rebase from Here…点击后:删除节点删除节点 d:修改 d 前的选项为 skip点击 Start Reba...原创 2019-07-25 14:08:00 · 7491 阅读 · 0 评论 -
ListView item 的 margin 没生效
文章目录结论原因普遍情况inflate 阶段addView 阶段ListViewinflate 阶段addView 阶段没传 parent传了 parent,parent 不是 listView传了 parent,parent 是 listview结论inflate(id, null)宽高、margin 都不生效inflate(id, parent, false)宽高生效,marg...原创 2019-08-23 13:50:59 · 579 阅读 · 0 评论 -
png8、png24、png32 的区别
png 图片分为:png8、png24、png32png8 支持索引透明、alpha透明png24 不支持透明png32 支持 alpha 透明png8 索引透明:用 8 个 bit 表示颜色,所以最多支持 256 种颜色。用一个 bit 用于表示透明,所以只能指定全透明或不透明。png8 alpha 透明:用 8 个 bit 表示颜色,所以最多支持 256 中颜色。用...原创 2019-09-04 11:15:37 · 4191 阅读 · 0 评论 -
Bitmap 的四种压缩方式详解
文章目录一、质量压缩二、采样率三、缩放法四、RGB_565Android 中图片是以 bitmap 形式存在的,那么 bitmap 所占内存,直接影响到了应用所占内存大小,首先要知道 bitmap 所占内存大小计算方式:像素数 x 像素大小=图片长度(单位为像素) x 图片宽度(单位为像素) x 一个像素点占用的字节数可采用的压缩方法:质量压缩:内存不变,压缩转化后的 bytes...原创 2019-09-13 12:31:28 · 9023 阅读 · 0 评论 -
双拼、kotlin、依赖倒置
最近在练习用双拼打字。双拼,即每个字都用两个键打出来。比如,“中国”这两个字,用全拼打出来的话,需要按的键是:z、h、o、n、g、g、u、o。如果是双拼(以小鹤双拼为例),就是v、s、g、o。这相当于很多的快捷键,一个键可以代表多个字母:v(zh)、s(ong)、g(g)、o(uo)。按键少了,速度自然更快,字的匹配度也会变高。只是这些快捷键的记忆需要练习。这种将汉字分为 声母 +...原创 2019-09-24 10:33:54 · 169 阅读 · 0 评论 -
gradle 里 def 方法为什么不能引用 def 的变量
为什么引用不到在 gradle 中,直接定义一个变量,再定义一个方法,在方法里里是不能引用到该变量的,但在一个闭包中就可以。def x = 1def fun() { println x }fun()android { println x }如上图所示,fun 无法引用 x,会报错。但 android 闭包中的 x 却能打印出来。这是为什么呢?由于不知道 gradle 编译...原创 2018-10-17 10:57:24 · 2653 阅读 · 0 评论 -
RxJava2 理解:建厂三部曲
过程:建厂签约开工简单的例子java 实现:String[] ps = {"p1", "p2", "p3"};for (String p : ps) { System.out.println(p);}改为 rxjava 的实现:Observable.just("p1", "p2", "p3").subscribe(new Consumer<String...原创 2019-04-19 18:04:09 · 170 阅读 · 0 评论 -
RxJava2 理解:Scheduler
文章目录一、自定义 Scheduler二、Scheduler2.1 Worker三、Schedulers四、IoScheduler一、自定义 Schedulerpublic class MySchedulor extends Scheduler { @Override public Worker createWorker() { return null; ...原创 2019-04-19 16:27:29 · 551 阅读 · 0 评论 -
设计模式:概述
本文介绍 23 种设计模式文章目录一、概述二、详解2.1 六大原则2.1.1 单一职责一、概述六大原则:单一职责里式替换接口隔离依赖倒置迪米特原则开闭原则23种设计模式:口诀:四者三器两工厂装饰策略作门面代理享元搭桥梁单例命令变状态备忘录上现原型模板组合责任链二、详解2.1 六大原则2.1.1 单一职责...原创 2019-04-23 20:59:51 · 229 阅读 · 0 评论 -
JVM 基础:内存分区
文章目录运行时数据区1 程序计数器2 Java 虚拟机栈3 本地方法栈4 Java 堆5 方法区6 运行时常量池7 直接内存运行时数据区Java 虚拟机运行时数据区包括:堆、方法区;虚拟机栈、本地方法栈、程序计数器1 程序计数器程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。代码的分支、循环、跳转、异常处理、线程切换等操作都需要用到程序计数器。每个...原创 2019-03-03 22:11:12 · 160 阅读 · 1 评论 -
Android 中 FLAG 的操作(位运算)
总结一下:添加 FLAG:mGroupFlags |= FLAG清除 FLAG:mGroupFlags &amp;amp;= ~FLAG包含 FLAG:(mGroupFlags &amp;amp; FLAG) != 0不包含 FLAG:(mGroupFlags &amp;amp; FLAG) == 0在 Android 源码中,有很多的 FLAG 常量,这些常量用二进制来表示时,只有一位是 1。有一个变量...原创 2019-03-02 23:42:16 · 1228 阅读 · 0 评论 -
java 基础:反射
理解反射:从一个对象获取到它的类信息。Class 类和 java.lang.reflect 类库一起对反射的概念进行了支持。一个类的信息主要包括属性、方法、构造器,对应 java.lang.reflect 类库中的 Field、Method、Constructor,通过 Class 类的 getFields()、getMethods()、getConstructors() 来获取。对于 F...原创 2018-10-21 22:10:19 · 180 阅读 · 0 评论 -
./、../ 对应的文件目录
./:指到当前文件的父目录下寻找(默认)../:指到当前文件的父目录的父目录下寻找.../:没有 .../println file("gradle")println file("./gradle")println file("../gradle")println file("./../gradle")println file("../原创 2018-10-17 11:19:53 · 548 阅读 · 1 评论 -
Can not perform this action after onSaveInstanceState
protected void onSaveInstanceState (Bundle outState)在 Activity 可能被 kill 之前调用,保存每个实例的状态,使它们可以在 onCreate(Bundle) 或 onRestoreInstanceState(Bundle) 方法中恢复(outState 会传给这两个方法)。比如,A 启动了 B,A 不可见了,A 就会通过执行这...原创 2018-06-23 21:34:41 · 634 阅读 · 0 评论 -
《Android 开发艺术探索》笔记:(4)View 的工作原理
ViewRoot 和 DecorViewViewRoot 对应于 ViewRootImpl,用来对 view 进行操作,它和最顶层 view 一起组成了显示上的 Window。DecorView 是 Activity、Dialog 中最顶层的 View。View 的绘制流程总述:View 的绘制流程是通过 ViewRoot 完成的。在 ActivityThread 中,当 Ac...原创 2018-04-27 23:52:06 · 249 阅读 · 0 评论 -
线程的生死
与人一样,线程的一生,不过是出生,活着,死去,活着才有那么多故事,求不得,等不到。线程的状态: New(新创建) Runnable(可运行) Blocked(被阻塞) Waiting(等待) Timed waiting(计时等待) Terminated(被终止) 新创建线程new Thread(),此线程还没有开始运行; 可运行线程一旦调用 start原创 2016-10-30 11:06:58 · 332 阅读 · 0 评论 -
Java i++ 分析
java 里 i++ 不是线程安全的。原创 2016-10-28 13:59:13 · 355 阅读 · 0 评论 -
Java 基础:ThreadLocal 解析
ThreadLocalThreadLocal,用于为线程提供线程私有变量。换句话说,它能为线程增加新的成员变量。实现方式:Thread 中提前放置一个成员变量 ThreadLocalMap,可以将它看作一个 ThreadLocal-&amp;gt;Object 的 Map(内部实现是一个数组)。当需要为 Thread 增加一个类型为 T 的成员变量时,声明一个 ThreadLocal&amp;...原创 2019-03-03 22:59:40 · 190 阅读 · 0 评论 -
Activity 的 isFinishing()、isDestroy() 分析
结论:isFinishing() 用于判断 Activity 是否正在 finish。isDestroy() 用于判断 Activity 是否已经 destroy。isFinishing() 返回 true 后 isDestroy() 才会返回 true。isFinishing()如注释所说,isFinishing 可以用在 onPause 中判断,该 Activity 是单纯的 ...原创 2019-03-14 15:30:55 · 9697 阅读 · 0 评论 -
JVM 基础:垃圾回收
一、标记垃圾1.1 引用计数法每个对象记录一个被引用值,被引用一次加一次,引用取消减一次。进行垃圾回收时,如果被引用值是0,就说明是垃圾。问题:循环引用当 A 引用 B,B 引用 A 时,他们都不会被回收。1.2 可达性分析从一系列根节点进行遍历,找到能到达的每个点。不在这些点内的对象就是垃圾。解决了循环引用问题。可达性分析的根节点:虚拟机栈中引用的对象方法区中的静态对象方...原创 2019-03-24 22:29:36 · 188 阅读 · 0 评论 -
对 FLAG_ACTIVITY_NEW_TASK、FLAG_ACTIVITY_CLEAR_TOP、FLAG_ACTIVITY_SINGLE_TOP 的理解
为了看得更清晰,以下使用代称newtask:FLAG_ACTIVITY_NEW_TASKcleartop:FLAG_ACTIVITY_CLEAR_TOPsingletop:FLAG_ACTIVITY_SINGLE_TOP文章目录default单独 singletop单独 cleartopcleartop + singletopnewtask单独 newtasknewtask + sin...原创 2019-04-28 10:37:59 · 3450 阅读 · 4 评论 -
对开屏页重复弹出问题的研究实验
背景应用入口是一个开屏 Activity,开屏 Activity 启动后会在几秒后启动主页 Activity,并 finish 自己。现象应用通过文件系统(installer)安装后,会弹出一个框,让用户选择“完成”、“打开”。点击“打开”后,进入应用。开屏展示过后进入主页,这时回到桌面(launcher),再打开应用,开屏又弹出了一次。重复回到桌面后打开,不断弹出开屏。分析instal...原创 2019-04-27 17:27:05 · 549 阅读 · 0 评论 -
Gradle 中的 all、each 的区别
官网 apiall:each:区别all 是 gradle 中 DomainObjectCollection 接口的方法。each 是 groovy 中 List、Map 等集合类的方法。它们的区别:1.all 会对集合内现有的元素和之后加入的元素,都执行给定的闭包操作。each 只会对集合内现有的元素执行给定的闭包操作。2.all 接收的闭包,可以直接访问集合内元素的属...原创 2019-05-01 22:22:50 · 3970 阅读 · 4 评论