- 博客(74)
- 资源 (1)
- 收藏
- 关注

原创 OkHttp3 中几个拦截器基本功能介绍
RetryAndFollowUpInterceptor功能:实现重试、跟踪实现原理:while(true) 死循环的实现。检验返回的 Response ,如果没有异常(包括请求失败、重定向等),那么执行 return Response, return 会直接结束循环操作,将结果返回到下一个拦截器中进行处理。检验返回的 Response ,如果出现异常情况,那么会根据 Response 新...
2019-01-15 16:50:53
2645

原创 Dagger 2 系列(六) -- 进阶篇:Component 依赖、@SubComponent 与多 Component 下的 Scope 使用限制
Dagger 2 系列(五) – 进阶篇:Component 依赖管理In general we have two ways to do this - with @Subcomponent annotation or with Components dependencies. The main difference between them is an objects graph sharin...
2018-09-25 17:02:19
2032

原创 Dagger 2 系列(五) -- 进阶篇:@Scope 和 @Singleton
Dagger 2 系列(五) – 进阶篇:@Scope 和 @SingletonAnnotated dependencies are single-instances but related to component lifecycle (not the whole application).In Dagger 2 scopes mechanism cares about keepin...
2018-09-21 15:39:33
2153

原创 Dagger 2 系列(三) -- 基础篇:@Module 和 @Provides
该系列博客的最终目标: 搭建 MVP + Dagger2 框架该系列博客包含以下几篇内容: Dagger 2 系列(一) – 前奏篇:基本概念介绍Dagger 2 系列(二) – 基础篇:基本功能的实现Dagger 2 系列(三) – 基础篇:@Module 和@Provides在这篇文章中你会看到什么: 1. @Inject 是什么 2. @Component 是...
2018-05-31 19:22:12
3308
原创 Java 泛型:深入理解通配符
1. 通配符概念通配符的出现,允许类型参数变化。2. 上界通配符(子类型通配符)<? extends ClassType> 该通配符为 ClassType 的所有子类型。表示任何泛型 ClassType 类型,它的类型参数是 ClassType 的子类,但不是 Pair< String>。上界通配符可以使用返回值,但是不可以为方法提供参数。继承关系:可进...
2019-06-05 11:37:18
3180
2
原创 The logbook of Android bug in daily development.
androidx 与 support 兼容、ButterKnife 版本Manifest merger failed : Attribute application@appComponentFactory value=(android.support.v4.app.CoreComponentFactory) from [com.android.support:support-compat:28...
2019-06-05 11:14:32
355
原创 Java 泛型:深入理解泛型的类型擦除
泛型代码和虚拟机Java 中的的泛型是伪泛型,为什这么说呢?因为 Java 在编译期间,所有的泛型信息都被擦除掉。称为类型擦除(type erasure)在 Java 虚拟机中没有泛型类型对象 – 所有对象都是属于普通类 , 所以我们要了解一下 类型擦除 的概念。1. 类型擦除无论何时定义一个泛型类型,都会自动提供一个响应的 原始类型 (raw type)(不存在泛型 )。原始类型的名字...
2019-02-24 21:50:54
2605
2
原创 Kotlin Lambda 闭包语法
Java 中的 Lambda 语法至于什么时候可以在 Java 中使用 Lambda ,具体可以参见 是时候了解 Lambda 表达式具体写法了代码示例public static void main(String[] args) { Thread thread = new Thread(new Runnable() { @Override ...
2019-02-17 15:48:37
549
原创 从缓存文件的角度帮你理解 Okhttp3 缓存原理
文章目录1. 需要了解的概念1.2 Okio1.1 DiskLruCache1.2.1 日志文件 journal1.2.2 DiskLruCache.Entry1.2.3 DiskLruCache.SnapShot1.2.3 DiskLruCache.Editor2. 缓存实现的有关流程1. 触发之后拦截器之前的操作1.1 日志文件的初始化1. App 启动后的初始化1.1 若 journal ...
2019-01-28 23:20:22
951
原创 关于 Java 异常机制的补充
为什么 Java 中打开物理资源,如磁盘文件、网络连接、数据库连接等,必须需要显式的关闭?JVM 提供的垃圾回收机制只负责堆内存分配出来的内存,打开的物理资源,GC 是不进行回收的,所以需要手动的关闭。如何正确的关闭资源?在 finall 中执行资源关闭操作。保证关闭资源前资源不为 null,因为存在资源初始化前就发生异常情况,所以在 finally 语句中对资源对象进行非空判断。...
2019-01-26 18:56:18
261
原创 Java 异常机制浅析
文章目录处理错误异常分类声明受查异常如何抛出异常创建异常类捕获异常捕获异常再次抛出异常和异常链finally 字句带资源的 try 语句分析堆栈轨迹元素使用异常机制的技巧使用断言启用和禁用断言使用断言完成代码检查记录日志关于异常的补充知识链接处理错误异常分类所有的异常都是继承于 Throwablegraph LRError-->ThrowableException-->Th...
2019-01-26 18:22:44
629
原创 手机安装 Charles HTTPS 证书
https://blog.youkuaiyun.com/weixin_35825766/article/details/80469619
2019-01-14 20:20:14
1974
原创 Java 内存空间分类
文章目录1. 概述2. 运行时数据区域2.1 程序计数器2.2 Java 虚拟机栈2.3 本地方法栈2.4 Java 堆2.5 方法区2.6 运行时常量池2.7 直接内存2.8 小结3. 附录1. 概述Java 不像 C/C++ 需要程序员自己管理内存,Java 把内存控制的权利交给类 Java 虚拟机。2. 运行时数据区域JVM 在 Java 程序运行时把它所管理的内存划分为几个不同的...
2019-01-11 15:59:30
836
原创 Kotlin 全面学习之路(十四) -- 注解和几个常用的注解
注解声明注解是将元数据附加到代码的方法。要声明注解,请将 annotation 修饰符放在类的前面:annotation class Fancy注解的附加属性可以通过用元注解标注注解类来指定:@Target 指定可以用该注解标注的元素的可能的类型(类、函数、属性、表达式等);@Retention 指定该注解是否存储在编译后的 class 文件中,以及它在运行时能否通过反射可见 (默...
2018-12-23 17:46:43
746
原创 Kotlin 中的 lateinit 、lazy、let 、apply 、also 、takeif、takeUnless
Kotlin和Groovy等语言一样,支持闭包(block),如果函数中最后一个参数为闭包,那么最后一个参可以不写在括号中,而写在括号后面,如果只有一个参数,括号也可以去掉。viewPager.setOnClickListener(new View.OnClickListener() { @Override public void onClick(...
2018-12-23 16:29:08
671
转载 关于Dalvik、ART、DEX、ODEX、JIT、AOT、OAT
关于Dalvik、ART、DEX、ODEX、JIT、AOT、OAT发表于 2017-06-30 | 分类于 Android | | 字数统计 | 阅读时长关于Dalvik、ART、DEX、ODEX、JIT、AOT、OAT,说真的,我看着都头大,每次看完过不了多久就会忘记一些内容,然后再去搜资料,好记性不如烂笔头,写在这里随时温故。Dalvik&ART1.1 DalvikD...
2018-12-18 14:24:44
3109
原创 Flutter 异常集(持续更新...)
异常情况:使用 flutter doctor 可以识别手机设备,但是 Adroid Studio 不识别。解决:使用命令行,设置 Flutter 配置下的 Android Sdk 目录。flutter config --android-sdk /yourAndroidSDKLocation或者在 AS 界面 Flile -&gt; Project Structour 下设置 P...
2018-12-14 18:20:30
1099
原创 CMake 常用的 API以及 Gradle 关联到原生库
创建一个动态库/静态库add_library(hello-libs // 指定库名 SHARED // 指定构建出来库的属性 -- SHARED:动态库、STATIC:静态库 hello-libs.cpp // 指定源码文件 )根据源码构建动态/静态库。find_library() 命令添加到您的 CM...
2018-11-14 15:56:21
811
原创 Android Studio 配置 javah 生成 C/C++ 头文件,完成 JNI 调用
在自己阅读 &amp;amp;lt;&amp;amp;lt;Android 系统框架&amp;amp;gt;&amp;amp;gt; 一书时,在其中章节有相关 JNI 的描述中我得知可以通过 Java 代码中的本地方法的声明可以生成相应 C/C++ 的头文件,进而可以在 C/C++ 源文件中进一步实现,真是知识让我渺小 。1、编辑 Java 源代码HelloJNI.javapublic class HelloJNI { // 本
2018-11-13 16:56:57
2086
Android Developer 需要了解的网站
Google Play 安装统计数据Android 各版本新特性Google Doc for andropid app developersGoogle 官方 sample谷歌开发者社区(GDG)
2018-11-12 11:03:36
511
原创 C++ 学习需要认识的几个基本概念
头文件namespace 命名空间编译执行过程typedef 声明C++ 中的变量声明 extern 关键字变量声明向编译器保证变量以给定的类型和名称存在,这样编译器在不需要知道变量完整细节的情况下也能继续进一步的编译。变量声明只在编译时有它的意义,在程序连接时编译器需要实际的变量声明。函数的声明同样的,在函数声明时,提供一个函数名,而函数的实际定义则可以在任何地方进行...
2018-11-01 15:25:24
304
原创 IBus 拼音无法选词
现象:Ubuntu 使用 IBus 拼音输入法在选词时无法得到相应的词,而只能显示相应的数字。解决方法:删除 .cache/ibus/libpinyin/ 下的所有文件。原因:不知道...
2018-11-01 10:41:00
694
转载 如何选择 compileSdkVersion, minSdkVersion 和 targetSdkVersion
英文原文:Picking your compileSdkVersion, minSdkVersion, and targetSdkVersion作者:Ian Lake,Google Android 推广工程师;翻译:韩国恺。当你发布一个应用之后,(取决于具体的发布时间)可能没过几个月 Android 系统就发布了一个新版本。这对你的应用意味着什么,所有东西都不能用了?别担心,向前兼容是 An...
2018-10-19 14:51:09
147
转载 [Gradle For Android] -- Gradle命令和配置
Gradle是一种构建工具,它抛弃了基于XML的构建脚本,取而代之的是采用一种基于Groovy的内部领域特定语言,建议可以先熟悉一下Groovy脚本。1. Gradle 常用命令:1.1 常用命令:gradle明明一般是./gradlew +参数, gradlew 代表gradle wrapper,意思是gradle的一层包装,大家可以理解为在这个项目本地就封装了gradle,即grad...
2018-10-19 10:17:36
346
原创 Android Studio 由代理引起的 (Connection refused)、(Read time out)
首先明确一点:此类问题皆是因为大陆的墙厚又高在 AS 的 Gradle 构建依赖时由于网速、大陆墙等原因,会遇到各种各样的问题,十分的苦恼而又无可奈何,如果不能定为具体原因,就只能看项目一路飘红了。1. 定位问题由于项目需要对 Android 9.0 进行适配,并借此机会大范围的升级项目中用到的三方工具,代码更改完毕,点击 “sync project with gradle files”...
2018-10-18 15:27:59
5881
原创 Kotlin 全面学习之路 (十三) -- 解构声明
在 Kotlin 全面学习之路 (十) – 数据类 中,我们谈到 数据类 使用应用于解构声明,那么什么是解构声明,我们在这一篇中探究 Kotlin 中的解构声明的概念。1. 何为解构声明在 Kotlin 中将以下语法称为解构声明:// 数据类data class Bean(var name: String, var age: Int)val bean = Bean("jack",12)...
2018-10-11 14:20:33
289
原创 Ubuntu 更改默认Python 版本
Ubuntu 版本: 18.04Python 默认版本: Python2.7目标 Python 版本:Python3.6方案一查看电脑 Pytho 版本#:update-alternatives --list python以上命令如果出现以下结果:update-alternatives: 错误: 无 python 的候选项说明 Python 的可选版本还没有被 updat...
2018-09-29 13:15:16
1285
原创 Charles 破解记录
自己版本 4.2.7 可用Registered Name: https://zhile.ioLicense Key: 48891cf209c6d32bf4
2018-09-28 17:48:28
191
原创 Kotlin 全面学习之路 (十二) --枚举类
在对 密封类 的学习过程中我们知道两者之间有所相同,那就具体学习一下 Kotlin 中的枚举类。
2018-09-26 15:19:34
251
原创 Kotlin 全面学习之路 (八) -- 属性与字段
1、属性1.1 声明属性在 Kotlin 中 属性分为 可变属性和只读属性:var 可变val 只读示例;class Mike { val name: String = &amp;amp;amp;amp;quot;Mike&amp;amp;amp;amp;quot; var age: Int = 25}2、完整的属性声明...
2018-09-16 13:38:28
600
原创 Kotlin 全面学习之路 (七) -- 可见性修饰符
在 Kotlin中有四个可见性修饰符,分别为:privateprotectedinternalpublic 如果没有显式的指定修饰符,默认可见性为 public 。他们在不同的声明作用域内有不同的意义。1、包在包的声明作用域内,他们用来修饰 Top-level (顶级声明)public 。不指定默认为 public 。声明随处可见。private。 文件内可见...
2018-09-14 15:29:18
383
原创 Kotlin 全面学习之路 (六) -- 对 Top-level 的理解
https://blog.jetbrains.com/kotlin/2015/06/improving-java-interop-top-level-functions-and-properties/
2018-09-14 14:38:23
1935
原创 Git 版本控制 -- 提交本地分支到远端分支/拉取远程分支
创建新分支 git branch newbranch 或 git checkout -b newbranch 创建并切换到新分支展示分支 git branch 切换分支 git checkout newbranch推送本地新建分支到远端分支(远端会自动创建分支) git push origin newbranch:originbr...
2018-09-13 16:24:02
736
原创 Git 版本控制 -- 理解 Git Rebase 指令
git reset 使用场景为丢弃 commit 后的 commit信息、index 信息或者源码。git reset 三种模式 - -soft - -mixed(默认) - -hardgit reset - -soft HEAD~n或commit id 回退项: commit 信息 回退情况: 当前 com...
2018-09-13 16:13:27
367
原创 Kotlin 全面学习之路 (五) -- 接口
1、定义和 Java 中一样,在 Kotlin 中使用关键字 interface 来定义接口:interface OnclickLisenter{ fun method()}2、接口实现没什么好说明的,直接代码class ViewClickListener :OnclickLisenter{ override fun method(){ //具体方法实现 ...
2018-09-12 18:37:53
204
原创 Kotlin 全面学习之路 (四) -- 类与构造器
1、类声明class People { ... }类声明由 class 关键字、类名、类头(指定类型参数、主构造器等)、由花括号包围的 类体 构成,其中类头和类体是可选。class People2、构造器在 Kotlin 中一个类可以有 一个主构造器 和 多个次构造器 。2.1 主构造函数主构造器是类头的一部分,在类名与可选参数后:class People co...
2018-09-11 15:59:06
207
Kotlin reference in Chinese (pdf)
2018-09-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人