概述
api、provided、compile、implementation 都是 gradle 添加依赖时的选项,不同的选项表示不同的依赖关系。
其中 api、implementation 是 Gradle 3.4 引入的新的依赖配置,用来代替 compile 依赖配置。其中 api 和以前的 compile 依赖配置是一样的。使用 api/compile 的依赖方式,会向外界暴露本模块所依赖的库的接口,使用 implementation 则不会。
书写是为了更好地思考
api、provided、compile、implementation 都是 gradle 添加依赖时的选项,不同的选项表示不同的依赖关系。
其中 api、implementation 是 Gradle 3.4 引入的新的依赖配置,用来代替 compile 依赖配置。其中 api 和以前的 compile 依赖配置是一样的。使用 api/compile 的依赖方式,会向外界暴露本模块所依赖的库的接口,使用 implementation 则不会。
笔记自用,部分内容待完善。
当您将片段作为 Activity 布局的一部分添加时,它存在于 Activity 视图层次结构的某个 ViewGroup 内部,并且片段会定义其自己的视图布局。您可以通过在 Activity 的布局文件中声明片段,将其作为 <fragment> 元素插入您的 Activity 布局中,或者通过将其添加到某个现有 ViewGroup,利用应用代码进行插入。不过,片段并非必须成为 Activity 布局的一部分;您还可以将没有自己 UI 的片段用作 Activity 的不可见工作线程。
LeakCanary 是一个内存泄漏的自动化监测工具。
内存泄漏指的是应该被释放的内存的没有被释放。原因?长生命周期的对象持有短生命周期对象的引用。
首先要找出哪些对象是应该被回收的?Android 中使用最频繁的是 Activity 和 Fragment 了。他们都有 onDestory 方法,当它们的 onDestroy 执行的时候,就可以把它们列为 「应该被回收的对象」,可在 onDestory 方法中建立检测点。
LitePal 采取的是对象关系映射(ORM)的模式,那么什么是对象关系映射呢?简单点说,我们使用的编程语言是面向对象语言,而我们使用的数据库则是关系型数据库,那么将面向对象的语言和面向关系的数据库之间建立一种映射关系,这就是对象关系映射了。
但是我们为什么要使用对象关系映射模式呢?这主要是因为大多数的程序员都很擅长面向对象编程,但其中只有少部分的人才比较精通关系型数据库。而且数据库的 SQL 语言晦涩难懂,就算你很精通它,恐怕也不喜欢经常在代码中去写它吧?而对象关系映射模式则很好地解决了这个问题,它允许我们使用面向对象的方式来操作数据库,从而可以从晦涩难懂的 SQL 语言中解脱出来。
项目地址:EventBus,本文分析版本: 3.1.1
EventBus 是一个 Android 事件发布/订阅框架,通过解耦发布者和订阅者简化 Android 事件传递,这里的事件可以理解为消息,本文中统一称为事件。事件传递既可用于 Android 四大组件间通讯,也可以用户异步线程和主线程间通讯等等。
传统的事件传递方式包括:Handler、BroadCastReceiver、Interface 回调,相比之下 EventBus 的优点是代码简洁,使用简单,并将事件发布和订阅充分解耦。
本篇博客主要包括以下三个部分
其中的代码基于 ButterKnife 8.6.0
本文假设你已经对注解有所了解。不了解注解的同学可以先看看这篇文章 ,我们主要关注编译期注解。

CharSequence 就是字符序列,String, StringBuilder 和 StringBuffer 本质上都是通过字符数组实现的。