自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Sean_css的博客

每天进步一点点...

  • 博客(89)
  • 资源 (2)
  • 收藏
  • 关注

转载 分享一个 Homebrew 安装失败的解决办法

知乎 - Homebrew国内如何自动安装(国内地址)

2020-03-21 21:09:52 561

原创 常见设计模式二:构造者模式

常见设计模式二:构造者模式前言构造者模式也是属于我们常用的设计的一种,比如我们在使用使用 StringBuilder、Retrofit、OkHttp 等,都使用了构造者模式,所以我认为构造者模式是工程师必须掌握的,不仅有助于我们看懂别人的代码,也有助于我们编写出高质量的代码。什么是构造者模式构造者模式又叫生成器模式, 构造者模式是将一个复杂对象构建和它的表示相分离,使得同样的构造过程可以创...

2020-03-12 15:19:18 1924

原创 常见设计模式四:代理模式

文章目录静态代理动态代理代理模式又称为委托模式,主要分为静态代理动态代理代理模式的设计里面是限制对对象的直接访问,要想访问具体对象需要通过该对象的代理类去访问。代理模式在很多地方是比较常见的,比如在 ARouter 内部,ARouter 的主要功能是通过其_ARouter 实现的,这里的 ARouter 就是_ARouter 的代理类。/** * Init, it must be...

2020-03-12 15:12:17 297

原创 常见设计模式三:工厂模式

文章目录前言一、简单工厂模式二、工厂方法模式三、抽象工厂模式前言前面分别介绍了单例模式和构造者模式,实际开发中,这两个模式的使用概率是很高的,还有一个使用率很高的设计模式就是工厂模式。今天来了解下工厂模式,工厂模式属于创建性模式的一种,而工厂模式本身又被大家分为三种:简单工厂模式工厂方法模式抽象工厂模式一、简单工厂模式简单工厂模式其实更多的是我们平时开发过程中的一个开发习惯,比...

2020-03-12 15:10:57 192

原创 Java 中的 Synchronized 关键字

文章目录修饰一个代码块多个线程访问同个对象的一个方法多个线程访问多个对象的一个方法Synchronized 锁一个明确的对象没有明确的锁,只是为了给一块代码加上同步修饰一个方法修饰一个静态的方法加上 Synchronized 关键字不加 Synchronized修饰一个类使用 synchronized(ClassName.class)不使用 synchronized(ClassName.class...

2020-02-29 00:08:16 268

原创 多线程的三个特征

1、有序性程序执行的顺序按照代码中定义的先后顺序执行。涉及到了 Java 中的指令重排序问题,在程序运行过程中,编译器和处理器会对指定做重排序。但是 JMM (Java Memory Model)能够确保在不同的编译器和不同的处理器平台上,通过插入指定类型的 Memory Barrier 来禁止特定类型的编译器重排序和处理器重排序,为上层提供一致的内存可见性保证。指令重排序不会影响代码在单线...

2020-02-28 22:57:23 424

原创 常见设计模式一:单例模式

在 23 种设计模式中,我们平时接触使用的最多的可能就是单例模式了,虽然这个设计模式大家都会,也很简单,但是里面还是有些东西值得探讨一下的,最终目的是能够结合实际需要写出最适合的单例代码。单例模式的特点单例模式是为了保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。那么最起码要有以下的特点:不能被其他对象初始化(构造方法需要私有)全局只有一个实例(自己本身只能创建一个实例)对...

2019-08-08 13:44:04 200

原创 OkHttp 源码解析(二)拦截器原理分析

文章目录一、前言二、用户自定义拦截器之-应用拦截器三、RetryAndFollowUpInterceptor 拦截器四、BridgeInterceptor拦截器五、CacheInterceptor拦截器六、ConnectInterceptor拦截器七、用户自定义网络拦截器拦截器八、CallServerInterceptor拦截器九、最后一、前言在上一篇 OkHttp 请求流程分析中,分别介绍了...

2019-07-07 19:50:00 408

原创 OkHttp 源码解析(一)请求流程分析

文章目录一、前言二、从同步请求流程开始2.1 一次同步请求2.2 构建 OkHttpClient 对象2.3 创建 Request2.4 构建 Call 对象2.5 调用 execute() 完成同步请求关键点 1关键点 21、在 RealCall 中会先生成第一个 RealInterceptorChain 对象,执行其 proceed 方法2、在 RealInterceptorChain 内部...

2019-07-07 19:48:35 310

原创 计算机网络学习之 Https 相关

计算机网络学习之 Https 相关文章目录计算机网络学习之 Https 相关一、前言二、HTTPS 简介为什么要使用 HTTPS?HTTP 和 HTTPS 的区别SSL/TLS三、HTTPS 握手过程1.Client Hello2.Server Hello3.Certificate, Certificate Status, Server Key Exchange, Server Hello Do...

2019-06-30 12:05:49 305

原创 计算机网络学习之 http 相关

文章目录一、简介Http 协议的特点二、URI 和 URLURIURLprotocol 协议hostname 主机名port 端口号(可选)path 路径query 查询(可选)fragment 片段(可选)三、网络分层体系3.1 应用层3.2 传输层可靠性连接性报文连接对象个数拥塞控制3.3 网络层3.4 链路层四、HTTP 报文4.1 请求报文1. 请求行2.请求头部3.请求体4.2 响应报文...

2019-06-28 19:06:25 611 2

原创 Android提供的 LruCache 的分析

文章目录前言什么是三级缓存缓存的核心 LRU 算法LruCache官方描述看下成员变量和构造方法常用方法分析put() 添加缓存trimToSize() 控制缓存的容量remove() 删除缓存get() 获取缓存evictAll清除全部缓存数据最后前言在日常的开发当中,我们主要的工作就是把用户想要看的信息通过界面展示出来,难免就要和数据打交道,对于一些用户关心的数据,我们肯定是要每次都要从网...

2019-06-15 16:35:57 449

原创 LinkedHashMap 源码分析

文章目录前言LinkedHashMap 的介绍LinkedHashMap 分析构造方法存入数据afterNodeInsertion 方法删除数据afterNodeRemoval 方法获取操作afterNodeAccess 方法遍历最后前言前面对 HashMap 的源码做了分析,我们知道 HashMap 内部的数据结构是数组+单链表/红黑树实现的,这种数据结构是不能保证数据插入的有序性的,因为会...

2019-06-13 23:13:12 246

原创 如何正确的终止一个线程?

文章目录前言1、使用 volatile 关键字修饰 变量的方式终止2、使用 interrupt() 方式终止2.1正常执行,没有被休眠、等待2.2 线程处于阻塞状态3、Stop 方法终止4、使用建议前言我们知道当调用 Thread 的 start()方法,执行完 run()方法后,或在 run()方法中 return,线程便会自然消亡。但是如果一些线程长时间的在后台运行,那么怎么去停止呢?下面...

2019-06-10 23:05:42 595

原创 HashMap 源码分析

文章目录前言HashMap 简介HashMap 源码分析一些变量和常量构造方法常用方法put、 putVal扩容关键方法 resize没有发生 hash 碰撞发生了 hash 碰撞先判断当前头节点的 key 是否相等,这个会根据 hash 值、key 是否为 null,不为 null 的时候,调用 key 的equals 方法进行比较 key 是否相等。如果为 null ,或者 key 相等,待...

2019-06-09 18:12:40 191

原创 LinkedList 源码分析

LinkedList 源码分析文章目录LinkedList 源码分析前言LinkedList 简介LinkedList 源码分析一些属性构造方法作为列表使用的一些方法:添加(add)的一些方法删除(remove)的一些方法修改(set)的一些方法查找(get)的一些方法清除(clear) 的一些方法作为队列使用的一些方法队列是什么?LinkedList 里面的实现add 、offerremove...

2019-06-07 16:04:52 186

原创 ArrayList 源码分析

文章目录前言ArrayList 简介ArrayList 源码分析一些属性构造方法add 方法addAll 方法remove 方法set 方法get 方法clear 方法indexOf 方法isEmpty 方法总结前言ArrayList 算是我们开发中最经常用到的一个集合了,使用起来很方便,对于内部元素的随机访问很快。今天来分析下ArrayList 的源码,本次分析基于 Java1.8 。Ar...

2019-06-06 16:42:20 166

原创 Android 事件分发机制

Android 事件分发机制文章目录Android 事件分发机制前言Android 事件分发中的事件是什么?Android 事件分发是什么?为什么会有事件分发机制?事件分发里面重要的三个方法事件分发讲解Activity 的事件分发ViewGroup 的事件分发。View 的事件分发关于事件分发的总结前言Android 分发机制是每个 Android 开发者所要必须了解的知识点,了解了分发机制...

2019-06-04 16:49:20 194

原创 Android 多线程之 IntentService 源码分析

Android 多线程之 IntentService 源码分析文章目录Android 多线程之 IntentService 源码分析一、前言二、初识` IntentService`2.1 API 文档定义2.1 使用时需要关注的方法 `onHandleIntent(Intent intent)`三、基本使用三、源码分析3.1 成员变量3.2流程解析3.3 为什么多次启动` IntentServi...

2019-05-05 17:57:11 764

原创 Android 多线程之 AsyncTask使用源码分析

Android多线程—AsyncTask使用源码分析Android多线程—AsyncTask使用源码分析一、前言二、初识 AsyncTask2.1 API 文档定义2.2 泛型参数2.3 必须实现的抽象方法2.4 其他的重要的可重写的方法2.5 一些不需要重写的重要方法2.6 一些使用注意事项三、AsyncTask 的使用3.1 实例展示四、源码分析4.1 ...

2018-08-08 19:58:12 770

原创 Android多线程之 HandlerThread 源码分析

一、前言安卓多线程在开发中也是重中之重了,前面已经对 Android 多线程中的 Handler 的使用和源码分析了,今天就来看下 HandlerThread 的源码分析。二、...

2018-08-06 19:26:03 803

原创 使用编译时注解实现简易的 ButterKnife 效果

一、前言二、准备三、编码实现3.1 编写注解3.2 编写注解处理器3.3 编写 api 模块四、使用一、前言现在有太多了关于注解的三方框架供我们使用,比如 ButterKnife、Dagger2 等,我们不仅要会使用,还要知道其中的大致原理。接下来就通过一个小的实例来熟悉下编译时注解。关于注解的基础知识就不介绍的,有兴趣的可以去看看这篇文章,写的挺...

2018-04-18 15:26:45 285

原创 Glide4 使用教程

Glide4 使用教程一、前言二、Glide 基本使用1、简单用法2、占位图2.1 加载占位图2.2 错误占位图2.3 null 占位图(后备回调符)3、加载指定大小的图片4、加载不同格式 Gif、Bitmap、Drawable、File5、缩略图的使用6、Glide 预加载、缓存到硬盘、以及加载监听6.1 换一种方式加载图片6.2 预加载图片到缓存6.3 下载...

2018-04-16 17:47:25 1105

原创 从一个异常认识Android中的 commit() 和 commitAllowingStateLoss()

从一个异常认识Android中的 commit() 和 commitAllowingStateLoss()从一个异常认识Android中的 commit() 和 commitAllowingStateLoss()一、重现以及解决二、原因分析2.1 commitAllowingStateLoss 与 commit 的区别2.2 Android 6.0 权限申请三、总结...

2018-04-09 16:48:32 2464

原创 Android 多线程之 Handler 源码分析

Handler系列—源码分析前言一、Handler 的运行机制1.1 Message1.2 MessageQueue1.3 Looper1.4 Handler1.5 Message、MessageQueue、Looper、Handler的对象关系二、Handler 源码分析2.1 在子线程中创建 Handler创建 Looper创建 Handler 对象Handle...

2018-03-31 11:18:33 1326

原创 Android 多线程之 Handler 基本使用

Handler系列—基本使用前言Handler 使用1、使用 Handler 的 post() 方法更新 UI2、使用 Handler 的 sendMessage() 方法更新 UI3、使用 runOnUiThread() 方法更新 UI4、使用 View 的 post() 方法更新 UI5、子线程中创建 Handler(handler1)发送消息,在子线程中的Handler(h...

2018-03-31 11:17:25 3626 3

原创 Java常用集合框架(一)

Java常用集合框架(一)前言一、实现了 Collection 接口1.1、List 接口1.1.1 ArrayList1.1.2 LinkedList1.1.3 ArrayList LinkedList 使用场景1.2、 Set 接口1.2.1 HashSet1.2.2 LinkedHashSet1.2.3 TreeSet1.3、 Queue二、实现了 M...

2018-03-29 13:34:54 564

原创 Java反射笔记

Java反射笔记Class的获取Class 的名字Class 的修饰符获取 Class 的成员获取 Filed获取指定名字的属性获取所有属性获取 Method获取 ConstructorField 的操控Field 类型的获取Field 修饰符的获取Field 内容的读取与赋值Method 的操控Method 获取方法名Method 获取方法参数M...

2018-03-27 20:52:41 317

原创 我的安卓之路

1、Android 进阶一步一步使用 DialogFragment 封装链式调用 DialogEventBus3.0实用教程Java多线程自定义 View 实战(一)做一个简单的进度条Dagger2 、 MVP的简单封装我的第一个开源项目我项目中会用到的开源项目(都是精品) 持续更新2、Android 基础Android UI模板设计—TopBar(标题栏)异步...

2018-03-20 20:48:27 411

原创 Dagger2 、 MVP的简单封装

Dagger2 + MVP的简单封装现在很多 Android 开发都在用 MVP 模式,并且现在 Dagger2 注入依赖也挺方便的,所以就简单的对两者做了个封装,这样使用起来会更加方便。我们这里不对 MVP 做具体的讲解,只是简单的封装一下,便于使用,具体的 MVP 使用请参考其他文章。代码已上传到 Github,有兴趣的可以去下载运行。准备工作Dagger引入com...

2018-03-20 13:06:48 1517

原创 自定义 View 实战(一)做一个简单的进度条

前言一、分析需求二、定义属性并获取三、测量四、布局五、绘制最后前言自定义 View 是每个 Android 程序员走向高级必经之路,本篇通过实现一个非常简单的自定义 View ,来简单了解下自定义 View 的流程。(最后会给出源码)先看下效果:录制的 gif 可能看不清,欢迎去 Github下载项目运行查看。一、分析需求这个 View ...

2018-02-06 10:29:54 759

原创 一步一步使用 DialogFragment 封装链式调用 Dialog

前言日常开发中,Dialog 是一个每个 app 所必备的。2018-01-31更新最后封装好的 BaseDialogFragment 已经添加到我的快速开发 lib 包中。可以通过:implementation cn.smartsean:lib:0.0.7 快速引入,也可以去 AndroidCode 查看示例源码。通常来说,每个 app 的Dialog 的样式

2018-02-02 15:42:22 1486

原创 Java IO流操作

首先我们得知道:我们存储在硬盘上的文件是byte byte byte…存储的,是数据的集合。java 中的 io 流主要分为:字节流字符流一、字节流字节流又分为输入流 InputStream输出流 OutputStream输入流负责从 源(可以是文件) 读取数据到 Java程序 中。输出流负责把 Java程序 中数据写入到 源(可以是文件) 中。

2018-02-02 15:41:39 724

原创 Android 上传 Library 到 JCenter

现在不喜欢废话了,直接干货吧1、注册注册地址:认清地址:https://bintray.com/signup/oss认清地址:https://bintray.com/signup/oss认清地址:https://bintray.com/signup/oss2、新建仓库注册成功登陆之后,点击主页面的 Add New Repository选择 Public

2018-02-02 15:40:52 215

原创 Android打开指定文件实践 --- 工具类

项目中有下载文件的功能,但是有点 low,就是单纯的下载,下载成功提示用户文件下载在哪,需要用户手动去文件管理器找这些文件,不是很人性化,于是决定新增下载文件以后让用户直接能打开文件,友好型会好很多前言首先在实现打开指定文件之前,我尝试过打开指定的文件夹,但是并没有成功,研究了大半天的时间,发现是不可行的,这是个坑,希望不要有人再踩这个坑了,(当然,也有可能是我没找到打开文件夹的方法

2018-02-02 15:39:54 438

原创 记一次页面有EditText时,键盘弹出的问题

先来看一下在 Manifest 文件里面的 Activity 里面的这个属性android:windowSoftInputMode="adjustPan|stateHidden"以下介绍部分属于来自官方文档这个属性是 Android 1.5之后推出的,主要是为了 Activity 与软键盘的交互,主要的作用有两个:当 Activity 成为用户注意的焦点时软键盘的状态 — 隐

2018-02-02 15:38:41 368

原创 Android基础 你必须了解的应用文件目录

在开发中一般会对手机的内存进行操作,比如在使用应用过程中产生的一些日志、图片等信息,我们有时候要对其进行必要的操作,所以要对文件这一块要有一个基础的理解。概念1、内部存储:首先说明一个概念,内部存储不是内存,而是像磁盘一样可以存储数据的地方,他在手机内部,属于手机自带内存的一部分。内部存储私有目录里面有一个 data/data 文件夹,下面存放是所有应用程序的包名文

2018-02-02 15:35:06 2032

原创 我项目中会用到的开源项目(都是精品) 持续更新

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗 Ctrl + B 斜体 Ctrl + I

2018-02-02 14:27:33 642 1

转载 Java多线程

写在前面的话:这篇博客是我从这里“转载”的,为什么转载两个字加“”呢?因为这绝不是简单的复制粘贴,我花了五六个小时对其中每一行的代码都有认真的练习,对其中的一些小错误进行调整,并且重新排版,希望通过本篇博客可以让自己对 Java 多线程有更好的理解,同时也希望能够帮助正在学习多线程的你。 此文只能说是 Java 多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基...

2017-05-09 16:39:07 635

原创 Android基础---PopupWindow实现漂亮的搜索

当初做毕业设计的时候,就在毕业设计 App 上面实现了该功能,当初只是简单的堆积代码,代码都是从别处拷贝了,对具体代码的意思也不是很清楚,现在做了一个简单的开源项目,也实现了该搜索功能,现在对 PopupWindow 有了更新的认识。本文会一步一步的教你实现效果图中的效果,包会。。。如果还是不会的话,欢饮点击下面的链接去看看我的项目中怎么用的。我的开源项目:Gank.io客户端 App 下载地址

2017-04-21 14:27:26 1992

Service播放音乐

可运行代码,实现活动中控制音乐播放

2016-04-17

常用的小Demo

这个小项目中有对话框的实现、通知栏提醒的实现、菜单的实现、ContentMenu的实现、submenu的实现以及圆形图片的实现,很不错的学习小例子

2016-04-06

空空如也

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

TA关注的人

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