自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Dagger2与MVP(八)

Dagger2与MVP(八)前面介绍了Dagger2的基本知识,并且通过示例代码演示了如何在Android开发中去使用Dagger2。 Dagger2可以减少很多模板化的代码,更易于测试、降低耦合度,创建可复用可交换的模板。 Dagger2优点: 提供了对全局对象实例的简单访问方式 声明了单例的实例都可以通过@Inject进行访问。比如下面的MyTwitterApiCl...

2018-06-07 10:48:23 779

原创 Dagger2之dagger-android(七)

Dagger2之dagger-android(七) Android Gradle // Add Dagger dependencies dependencies { compile ‘com.google.dagger:dagger:2.x’ annotationProcessor ‘com.google.dagger:dagger-compiler:2.x...

2018-06-07 10:47:43 1205

原创 Dagger2Android示例代码(六)

Dagger2Android示例代码(六)经过前面的几个部分,基本把Dagger2讲完了,都是通过简单的示例的代码。那这里我们就用开发中具体的部分来进行示例, 这里示例主要是有两个小问题,第一个就是前面我们从例子开始讲的试试直降了@Inject在变量上的使用,没有将去实际的用构造函数使用@Inject来讲解。 还有一个就是Component在使用inject的时候也有两种方式:create...

2018-06-07 10:47:08 433

原创 Dagger2Lay和Provider(五)

Dagger2Lay和Provider(五)Lazy<>和Provider<>我们再回到之前的例子,现在我们把前面使用单例的部分都去掉,再来继续讲其他的部分。在上面的CoffeeModule中,把每个provideXXX()都添加一句log: @Modulepublic class CoffeeModule { @Provides ...

2018-06-07 10:46:15 491

原创 Dagger2单例(四)

Dagger2单例(四)我们就继续用前面的例子开始讲了,如果我使用了两个对象: class CoffeeMaker { @Inject Heater heater; @Inject Heater heater2; CoffeeMaker() { CoffeeComponent component = DaggerCoffeeC...

2018-06-07 10:45:33 1214 1

原创 Dagger2入门demo扩展(三)

Dagger2入门demo扩展(三)上一篇文章中讲了一个入门的例子,感觉虽然不懂内部怎么实现的,好像大体知道要怎么去用了,理解了每部分都是干什么的,既然都讲了例子了,那就继续用 这个例子讲下如果被依赖的类的构造函数带有参数,我们该怎么去处理?现在大夏天的我们平时去吧台打咖啡都想来点清凉的,透心凉,心飞扬,那怎么办?这时候我们是不是该提供一个加冰块的功能啊? 咖啡小姐姐把咖啡豆进...

2018-06-07 10:39:59 367

原创 Dagger2入门demo(二)

Dagger2入门demo(二)Dagger中使用了很多注解: @Module:Modules类里面的方法专门提供依赖,所以我们定义一个类,用@Module注解,这样Dagger在构造类的实例的时候,就知道从哪里去找到需要的 依赖。modules的一个重要特征是它们设计为分区并组合在一起(比如说,在我们的app中可以有多个组成在一起的modules)@Provide:在module...

2018-06-07 10:39:05 837

原创 Dagger2简介(一)

Dagger2简介(一)Dagger A fast dependency injector for Android and Java.Dagger是一个依赖注入(Dependency Injection,简称DI)框架,butterknife也是一个依赖注入框架。但是Dagger2比Butterknife更强大的多,它的主要作用,就是对象的管理,其目的是为了降低程序耦合。有关...

2018-06-07 10:38:24 374

原创 Retrofit详解(下)

Retrofit详解(下)上一篇文件介绍了Retrofit的基本使用,接下来我们通过从源码的角度分析一下Retrofit的实现。 首先看一下它的基本使用方法: // 1Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com/") .addCo...

2018-05-30 15:27:04 357

原创 Retrofit详解(上)

Retrofit详解(上)之前写过一篇文章volley-retrofit-okhttp之我们该如何选择网路框架来分析Volley与Retrofit之间的区别。之前一直用Volley比较多。但是随着Rx系列的走红,目前越来越多的项目使用RxJava+Retrofit这一黄金组合。而且Retrofit使用注解的方式比较方便以及2.x版本的提示让Retrofit更加完善,今天简单的来学习记录下。...

2018-05-30 15:26:27 328

原创 Android WorkManager

Android WorkManager谷歌在今年的Google I/O上宣布了一项非常令人兴奋的功能,该功能允许开发人员执行传统上需要详细了解各种API级别和可用于这些API的后台任务库的后台任务(简单点说就是”管理一些要在后台工作的任务, – 即使你的应用没启动也能保证任务能被执行”),这就是WorkManager,WorkManager提供了从其他API(例如JobScheduler,Fi...

2018-05-30 15:22:31 2819

原创 ConstraintLayout简介

ConstraintLayout简介ConstraintLayout从发布到现在也得有两年的时间了,但是目前在项目中却很少用到他。今天闲下来记录一下,以后可以用来解决一些布局的嵌套问题。 ConstraintLayout是RelativeLayout的升级版本,但是比RelativeLayout更加强调约束,它能让你的布局更加扁平化,一般来说一个界面一层就够了。 而且它可以直接在布局编辑...

2018-05-30 15:19:29 360

原创 volley-retrofit-okhttp之我们该如何选择网路框架

volley-retrofit-okhttp之我们该如何选择网路框架说起Volley、Retrofit、OkHttp相信基本没有人不知道。当然这里把OkHttp放进来可能有些不恰当。 因为OkHttp的官方介绍是An HTTP+HTTP/2 client for Android and Java applications。 也就是说OkHttp是基于http协议封装的一套请求客户端。它是真正的网

2016-08-12 17:58:22 2956

原创 butterknife源码详解

butterknife源码详解作为Android开发者,大家肯定都知道大名鼎鼎的butterknife。它大大的提高了开发效率,虽然在很早之前就开始使用它了,但是只知道是通过注解的方式实现的,却一直没有仔细的学习下大牛的代码。最近在学习运行时注解,决定今天来系统的分析下butterknife的实现原理。 如果你之前不了解Annotation,那强烈建议你先看注解使用.废多看图: 从图中可以很

2016-07-14 12:05:27 3221 1

原创 注解使用

注解使用简介 Annotations, a form of metadata, provide data about a program that is not part of the program itself. Annotations have no direct effect on the operation of the code they annotate.更通俗的意思是为程序的元

2016-07-13 12:02:44 3867 3

原创 Android6.0权限系统

Android6.0权限系统Android权限系统是一个非常重要的安全问题,因为它只有在安装时会询问一次。一旦软件本安装之后,应用程序可以在用户毫不知情的情况下使用这些权限来获取所有的内容。 很多坏蛋会通过这个安全缺陷来收集用户的个人信息并使用它们来做坏事的情况就不足为奇了。 Android团队也意识到了这个问题。在经过了7年后,权限系统终于被重新设置了。从Anroid 6.0(API

2016-06-15 18:00:10 5010

原创 Instant Run详解

InstantRun详解之前在写AndroidStudio提高Build速度这篇文章的时候写到,想要快,就用Instant Run。最近有朋友发来邮件讨论它的原理,最近项目不忙,索性就来系统的学习下。Android Studio2.0开始引入了Instant Run,它主要是在Run和Debug的时候可以去减少更新应用的时间。虽然第一次Build的时候可能会消耗稍长的时间来完成,但是Instant

2016-06-12 15:24:11 5394

原创 屏幕适配之百分比方案详解

屏幕适配之百分比方案详解Android设备碎片化十分严重,在开发过程中的适配工作也非常很繁琐,有关屏幕适配的介绍请看之前的文章屏幕适配。最近看到DrawerLayout,support v4中提供的类,想到对google提供的这些支持库,自己一点都不熟悉,想着看看Google提供的支持库都有什么内容。结果看着看着在最后忽然看到了Percent Support Library。寻思怎么还百分比呢?仔细

2016-06-07 19:16:09 6719

原创 自定义View详解

自定义View详解虽然之前也分析过View回执过程,但是如果让我自己集成ViewGroup然后自己重新onMeasure,onLayout,onDraw方法自定义View我还是会头疼。今天索性来系统的学习下。onMeasure/** * <p> * Measure the view and its content to determine the measured width a

2016-06-07 12:29:35 4621 1

原创 Android HttpURLConnection源码分析

Android HttpURLConnection源码分析之前写过HttpURLConnection与HttpClient的区别及选择。后来又分析了Volley的源码。 最近又遇到了问题,想在Volley中针对HttpURLConnection添加连接池的功能,开始有点懵了,不知道HttpURLConnection要怎么加连接池, 虽然感觉这是没必要的,但是心底确拿不出依据。所以研究下HttpU

2015-07-15 17:03:41 7525 4

原创 Volley源码分析

Volley源码分析Volley简介 volley官方地址 在Google I/0 2013中发布了Volley.Volley是Android平台上的网络通信库,能使网络通信更快,更简单,更健壮。这是Volley名称的由来:a burst or emission of many things or a large amount at once.Voll

2015-07-13 19:01:28 1219

原创 Kotlin学习教程(九)

Kotlin学习教程(九)Kotlin团队为Android开发提供了一套超越标准语言功能的工具: Kotlin Android Extensions是一个编译器扩展,可以让您摆脱代码中的findViewById()调用,并将其替换为合成编译器生成的属性。Anko是一个提供围绕Android API和DSL的一组Kotlin友好的包装器,可以用Kotlin代码替换layout .x...

2018-06-05 11:21:35 588

原创 Kotlin学习教程(八)

Kotlin学习教程(八)Kotlin协程一些API启动长时间运行的操作(例如网络IO、文件IO、CPU或GPU密集型任务等),并要求调用者阻塞直到它们完成。协程提供了一种避免阻塞线程 并用更廉价、更可控的操作替代线程阻塞的方法:协程挂起。 协程通过将复杂性放入库来简化异步编程。程序的逻辑可以在协程中顺序地表达,而底层库会为我们解决其异步性。该库可以将用户代码的相关部分包装为回调、...

2018-06-05 11:20:54 496

原创 Kotlin学习教程(七)

Kotlin学习教程(七)这篇文章主要学习下lambda表达式。因为后续一些例子会用到。 “Lambda 表达式”(lambda expression)其实就是匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象 (lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同...

2018-06-05 11:20:11 311

原创 Kotlin学习教程(六)

Kotlin学习教程(六)注解注解是将元数据附加到代码的方法。要声明注解,请将annotation修饰符放在类的前面: annotation class Fancy注解的附加属性可以通过用元注解标注注解类来指定: @Target指定可以用该注解标注的元素的可能的类型(类、函数、属性、表达式等)@Retention指定该注解是否存储在编译后的class文件中,以及...

2018-06-05 11:19:36 339

原创 Kotlin学习教程(五)

Kotlin学习教程(五)泛型class Data&lt;T&gt;(var t : T)interface Data&lt;T&gt;fun &lt;T&gt; logic(t : T){}定义: class TypedClass&lt;T&gt;(parameter: T) { val value: T = parameter}这个类现在可以使用...

2018-06-05 11:19:02 402

原创 Kotlin学习教程(四)

Kotlin学习教程(四)数据类:使用data class定义数据类是一种非常强大的类。在Kotlin学习教程(一)中最开始的用的简洁的示例代码就是一个数据类。这里我们再拿过来: public class Artist { private long id; private String name; private String url; pr...

2018-06-05 11:18:19 438

原创 Kotlin学习教程(三)

Kotlin学习教程(三)前面介绍了基本语法和编码规范后,接下来学习下基本类型。 在Kotlin中,所有东西都是对象,在这个意义上讲我们可以在任何变量上调用成员函数和属性。 一些类型可以有特殊的内部表示——例如, 数字、字符和布尔值可以在运行时表示为原生类型值,但是对于用户来说,它们看起来就像普通的类。 在本节中,我们会描述Kotlin中使用的基本类型: 数字、字符、布尔值、数组与字...

2018-06-05 11:17:19 414

原创 Kotlin学习教程(二)

Kotlin学习教程(二)上一篇文章介绍了Kotlin的基本语法,我感觉在继续学习更多知识之前有必要单独介绍以下编码规范。 不管学什么东西,开始形成的习惯以后想改都比较困难。所以开始就用规范的方式学习是最好的。 命名风格如果拿不准的时候,默认使用Java的编码规范,比如: 使用驼峰法命名(并避免命名含有下划线)类型名以大写字母开头方法和属性以小写字母开头使...

2018-06-05 11:16:41 441

原创 Kotlin学习教程(一)

Kotlin学习教程(一)在5月18日谷歌在I/O开发者大会上宣布,将Kotlin语言作为安卓开发的一级编程语言。并且会在Android Studio 3.0版本全面支持Kotlin。 Kotlin是一个基于JVM的新的编程语言,由JetBrains开发。JetBrains作为目前广受欢迎的 Java IDE IntelliJ的提供商,在Apache许可下已经开源其Kotlin...

2018-06-05 11:16:05 3278

转载 Java 设计模式(Design Patterns)

设计模式(Design Patterns)设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。 项目中合理的运用设计模式可以完美的解决...

2018-06-01 15:56:09 2587

原创 剑指Offer(下)

剑指Offer(下)剑指Offer(上)一共是23道题。 二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。 是则返回true,否则返回false。假设输入的数组的任意两个数字都互不相同 思路: 在后序遍历得到的序列中,最后一个数字是树的根节点的值。 数组中前面的数字可以分为两部分:第一部分是左子树结点的值, 它们都比根节点的...

2018-06-01 15:55:20 230

原创 剑指Offer(上)

剑指Offer(上)最近面试,遇到一些笔试题,写不上来,内心是崩溃的,该好好复习下了,所以决定仔细做一遍,随便也整理下,方便大家学习。我没找到第一题是什么- -!,谁知道的给补充下吧实现单例模式 单例的实现分为好几种: 饿汉式懒汉式枚举 具体实现: 饿汉式 public class Single...

2018-06-01 15:54:50 531

原创 HashMap实现原理分析

HashMap实现原理分析HashMap主要是用数组来存储数据的,我们都知道它会对key进行哈希运算,哈系运算会有重复的哈希值,对于哈希值的冲突,HashMap采用链表来解决的。 在HashMap里有这样的一句属性声明: transient Entry[] table;可以看到Map是通过数组的方式来储存Entry那Entry是神马呢?就是HashMap存储数据所用的类,它拥...

2018-05-31 17:47:35 147

原创 hashCode与equals的关系

hashCode与equalsHashSet和HashMap一直都是JDK中最常用的两个类,HashSet要求不能存储相同的对象,HashMap要求不能存储相同的键。 那么Java运行时环境是如何判断HashSet 中相同对象、HashMap中相同键的呢?当存储了相同的东西之后Java运行时环境又将如何来维护呢? 在研究这个问题之前,首先说明一下JDK对equals(Object obj)...

2018-05-31 17:46:53 139

原创 线程池的简介

线程池简介所谓线程池,就是将多个线程放在一个池子里面(所谓池化技术),然后需要线程的时候不是创建一个线程,而是从线程池里面获取一个可用的线程,然后执行我们的任务。线程池的关键在于它为我们管理了多个线程,我们不需要关心如何创建线程,我们只需要关系我们的核心业务,然后需要线程来执行任务的时候从线程池中获取线程。任务执行完之后线程不会被销毁,而是会被重新放到池子里面,等待机会去执行任务。在什么...

2018-05-31 17:46:12 218

原创 Java动态代理

动态代理有关代理模式已经动态代理和静态代理的区别请查看另一篇文章设计模式 刚毕业的时候在学习android时看到过张孝祥老师的Java高新技术,里面 讲到了动态代理,当时看完后感觉懂了.但是现在全部都忘了。 因为动态代理我们平时用的其实并不多,但是作为Android开发,你肯定知道Retrofit,而Retrofit就是基于动态代理实现。 动态代理的...

2018-05-31 17:45:00 461

原创 Android图片加载库Glide简介(下)

Android图片加载库Glide简介(下)官网:Glide Glide的回调:Targets假设我们不想将加载的图片显示到ImageView上,而是只想得到对应的Bitmap。Glide提供了一种可以通过Targets获取Bitmap的方法。 Target和callback没什么不同,都是在通过Glide的异步线程下载和处理后返回结果。 Glide提供了多个不同目的的ta...

2018-05-31 17:44:13 461 1

原创 Android图片加载库Glide简介(上)

Android图片加载库Glide简介(上)官网:Glide Glide是Google员工的开源项目,Google官方App中已经使用,在2015年的Google I/O上被推荐。Glide的优点: 使用简单可配置度高,自适应程度高支持多种数据源,网络、本地、资源、Assets等支持Gif图片。支持WebP。加载速度快、流畅度高。Glide的with()方法不...

2018-05-31 17:43:23 1269

原创 Android图片加载库比较

图片加载库比较Android开发过程中,图片加载基本是每个项目都必备的功能,图片加载的开源项目也比较多,从最老牌的Android-Universal-Image-Loader,到后来Google的Volley再到良心公司Square的Picasso以及FaceBook的Fresco和Google IO开发者大会上推荐的Glide。面对这么多的加载库我们该如何去选择? 他们各有优缺点,没...

2018-05-31 17:42:26 1520

空空如也

空空如也

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

TA关注的人

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