自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

夏的专栏

士不可不弘毅,任重而道远

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

转载 Android 绘图时实现双缓冲

项目中Canvas绘制部分比较多,为了提升页面的流畅度,用到了Canvas双缓冲技术,对这块不太了解,正好看到了一篇文章,在这里记录下,方便后续学习转载地址一、双缓冲技术原理:在内存中创建一片内存区域,把将要绘制的图片预先绘制到内存中,在绘制显示的时候直接获取缓冲区的图片进行绘制。更具体一点来说:先通过setBitmap方法将要绘制的所有的图形绘制到一个Bitmap上也就是先在内存空间完成...

2019-12-19 13:15:12 1077

转载 VLayout全面解析

概述最近看了下VLayout,它主要用在超复杂界面布局,感觉确实比较好用,看了网上这篇文章,基本用法都已经写到了,索性就转载过来,方便后续复习。github地址VLayout简介vlayout全称VirtualLayout,它是一个针对RecyclerView的LayoutManager扩展, 主要提供一整套布局方案和布局间的组件复用的问题。它通过定制化的LayoutManager,接...

2019-12-01 21:53:51 3283 1

原创 UI进阶--Paint的高级使用

最近比较空闲点,学习了Paint的使用,自定义View中Paint是用得比较多的一个画笔对象,使用好它可以绘制各种牛逼的效果,所以还是有必要记录并学习下。一些常规基础的东西就不过多介绍了,还是直接记录一些进阶技巧。渲染渲染它是对于我们绘制区域进行按照渲染规则进行色彩的填充,在android中要使用它,需要借助Shader(着色器)来实现,定义图形的着色和外观,设置给画笔paint使用,下面来...

2019-11-09 12:38:56 269

原创 一点关于dagger2在项目中使用的总结

dagger是一款ioc注入框架,相比于butterknife只能进行控件和事件注入,它可以进行任意对象的注入,对于项目的解耦是非常方便的,在中大型项目中使用得比较多,相较于其它第三方库,这个库的入门槛还是比较高的,如果不熟悉它的使用,是很容易配置报错的,因为它里面有很多规则是需要遵守的,如果不按照它的要求来,导致的结果就是编译不通过。最近打算总结下关于它的基本使用,以及在项目中使用的建议。基...

2019-09-22 21:51:30 244

原创 RxJava执行流程和线程切换原理

RxJava在项目开发中用得还是比较多的,它能将复杂的嵌套调用转为链式调用,减轻代码的复杂性,方便于代码的后期维护工作。用得多了,自然想看下内部的实现原理,毕竟这么牛逼的框架,其内部的实现思想也是值得学习的,再者之前面试问到了RxJava的原理。所以这里就来记录下(代码基于2.x),也方便后续复习。基本使用Observable.just("1") .subscribe(object ...

2019-08-20 16:42:41 564

原创 Glide源码执行流程深入分析

一直想写关于Glide的文章,但是始终没写,它背后帮我们执行了非常多的逻辑,使我们调用起来非常简单。最近又深入学习了它的代码,趁此有机会记录下来,其实之前已经看过郭神的关于Glide的分析,写得非常详细,但是是基于3.x的,而我们最近使用都是4.x的,部分执行流程有所变化。所以还是打算自己整理一遍头绪,方便以后回顾,但是不会写得太详细,毕竟流程也非常多,只需要把关键点记录下来,然后对着源代码跟踪就...

2019-08-04 10:58:05 207

原创 Android优雅实现进程间数据传递

最近看了下饿了么开源框架Hermes,它是Android进程间IPC通信框架,可以避免AIDL的编写,使用接口代理的方式获取跨进程的数据,感觉挺有意思的,于是学习了下,自己总结了一套简易版的实现,当然还有许多要完善的,但是基本架构思想还是值得学习的。项目结构整个项目三个部分client,server,ipc_core,分别是客户端,服务端和IPC通信核心代码,其中client,server...

2019-07-21 12:38:01 489

原创 Handler消息机制深入学习

Handler是Android消息机制中非常重要的一块,Android系统源码许多地方使用到了Handler,现在项目中许多框架底层也是通过Handler来封装的,而且面试也是必问的一块,之前面试吃过几次亏,因为了解得不够深入,所以作为Android开发程序员来说,这块是必须要掌握的,不仅是使用,而且包括源码,底层实现流程。之前就想写Handler的源码解析文章了,但是一直没有动手,因为里面有些...

2019-06-23 23:11:39 473

转载 OkHttp3入门介绍之Cookie持久化

最近项目需要用到cookie,来验证客户端的唯一性,所以踩了很多坑(就是浪费了很多时间),用的okttp默认不对cookie处理操作,所以接口一直返回未登录状态,所以后来网上找了一篇文章,写得很实用,特此转载下方便后续复习地址: https://blog.csdn.net/u012527802/article/details/81220301 https://www.jianshu.com/p/...

2019-06-06 16:15:24 1141

原创 Luban压缩源码深入学习

很久以前对于图片的压缩一直就使用Luban这个第三方库,主要是它提供的api比较方便,支持同步和异步压缩,也可以同时压缩多张图片,比较好用,效果也比较好。它的内部会根据图片的宽高比例,选择一个合适的压缩算法,对图片进行采样率压缩和质量压缩,效果接近微信朋友圈压缩的效果。最近新项目中使用到了,就顺便来学习下它的内部实现原理。一. 简单使用源码版本 1.1.81 . 同步压缩 Lu...

2019-05-17 16:24:17 1961

转载 Android实现圆弧滑动效果之ArcSlidingHelper篇

这篇文章看过确实值得学习,特别是在解释为什么属性动画平移之后为什么依然可以点击,以前我只是知道,但是不知道为什么,这篇比较详细解释了为什么,值得收藏转载自 https://blog.csdn.net/u011387817/article/details/80313184前言我们平时在开发中,难免会遇到一些比较特殊的需求,就比如我们这篇文章的主题,一个关于圆弧滑动的,一般是比较少见的。其实在遇...

2019-04-13 22:16:35 352

原创 React+Redux+AntD搭建TodoList应用

最近一直在学React,它是一款前端的,用于构建用户界面的JavaScript库,它的好处就是将界面拆分成一个个组件,然后进行组合,比较适合于模块化编程。但是组件之间的数据管理却没有一个好的解决方案,特别是对于组件之间层次比较深,数据之间传递还是很麻烦的,所以有了Redux,它主要职责就是多页面数据存储,使用时候会构建一个中心store,所有数据都会以state形式存放于store中,界面中只需要...

2019-03-31 00:12:40 777

原创 Gradle常见插件开发方式

Gradle作为项目的构建方式,起着很重要的作用,而我们在开发中却基本很少深入的了解它,这篇文章就记录下在学习插件开发过程的笔记。插件开发的基础是task,对于task的学习,可以看任玉刚的这篇文章,基本的使用介绍得很清楚。Gradle插件分为脚本插件和对象插件,下面来分别看下两者的使用脚本插件脚本插件就是在普通的gradle中写一系列task,然后在别的gradle构建脚本中通过 appl...

2019-02-21 16:08:42 3380

原创 LeakCanary源码深入学习

说到内存泄漏检测工具基本都知道用LeakCanary,它可以用来检测Activity和Fragment是否发生内存泄露,并且自动弹出通知告知用户是否发生了内存泄漏,且最终以 UI 的形式向我们展示内存泄漏对象的引用链,以便我们能精确的定位到内存泄漏的代码。但是我们不能只局限于表面,也应该去学习其源码的实现,LeakCanary的强大不仅在于能够精确定位内存泄漏代码的具体位置,也在于里面设计的模块分...

2019-01-03 17:33:21 228

原创 okhttp源码深入学习

okhttp是现在比较流行的基础网络访问框架,因为有比他更加好用的Retrofit,okhttp用起来确实也很方便,基本可以满足我们日常开发的项目需求,如果实在满足不了,也可以做自己的定制。okhttp的源码也是面试中比较经常问到的,特别是拦截器这部分,好几次都问到了,当时只有很尴尬的回答不知道。作为一名有追求的程序员,也必须了解它的源码。其实好久以前就在看了,只不过当时能力有限,拦截器部分一直看...

2018-12-13 23:00:01 321

原创 HTTP和HTTPS协议学习

平时开发中只要是一个上线的app基本都有网络请求,虽然现在许多开源库都已经帮助我们更加容易的访问网络,但是我们也需要去了解网络访问的原理,这样我们后期去定制我们自己的框架就有许多的帮助。同时面试也喜欢问HTTP或者HTTPS相关知识,为了面试的时候不懵逼,也为了以后更好的理解HTTP或者HTTPS原理,所以下面就总结下它们的相关知识。1. HTTP特点HTTP协议(HyperText Tra...

2018-11-16 11:57:50 836

原创 View的滑动方式

在Android中滑动是实现自定义控件的基础,同时在开发中我们也会难免遇到View的滑动处理,不管哪种滑动处理,其基本思想都是类似的。当点击事件传到View时,系统记下触摸点的坐标,手指移动时系统记下移动后触摸的坐标并算出偏移量,并通过偏移量来修改View的坐标。下面来总结下android系统中常见的滑动方案。View的坐标系在介绍View的滑动时候,先要介绍下View的坐标系View的...

2018-11-04 21:53:15 186

原创 View事件分发笔记

view事件分发机制一直是面试的常问点,我面试了好几次经常问到,所以这次趁此机会总结下事件分发机制的流程,已经一些注意点,这篇文章是看《Android开发艺术探索》的总结事件的传递规则事件传递的对象是MotionEvent,当事件产生后,系统就会把这个事件传递给一个具体的View,而这个过程就是分发过程,由三个很重要的方法来完成。public boolean dispatchTouchEv...

2018-10-20 16:29:51 292

原创 微信小程序踩过的坑与总结

从八月开始就在着手看微信小程序,当时看慕课网的入门视频,算是基本入门了,后来有幸去参加公司的小程序项目开发,踩过不少坑,特别在此纪录,如果是普通的入门只需要看下文档,然后稍微看下博客就会了,这里只是记录我踩过的一些坑。所编写的代码调试基础库在2.3.01. map组件设置view无效这个对于刚开始做项目的人是很疑惑的,后来经过查找原来是map组件在小程序中属于原生组件,原生组件上面只能设...

2018-10-07 14:45:04 1258

原创 TCP网络分层与三次握手四次挥手

TCP/IP网络分层网络分层百度定义: 网络分层就是将网络节点所要完成的数据的发送或转发、打包或拆包,控制信息的加载或拆出等工作,分别由不同的硬件和软件模块去完成。这样可以将往来通信和网络互连这一复杂的问题变得较为简单。网络层次有osi和TCP/IP两种,可划分为七层因特网协议栈和五层因特网协议栈分层结构1.应用层应用层是我们经常接触使用的部分,比如常用的http协议、ftp协议...

2018-09-25 16:59:47 277

原创 Android运行时机制问题解决方案

概述在Android6.0之前,用户申请的权限默认是全部同意的,有时候一个应用安装可能会申请很多不必要权限,这样无疑会让个人隐私变得容易泄露。在Android6.0之后,应用许可提示可以自己定义了,权限机制分为普通权限和危险权限,对于普通权限在清单中注册直接会同意,而对于危险权限需要用户在代码中手动申请,然后在回调中处理同意和不同意的结果。关于运行时权限的使用可以看这里,讲得还是很清楚的。...

2018-09-12 21:53:58 251

原创 观察者模式以及在Android中的使用

《Android源码设计模式解析与实战》第12章观察者模式笔记介绍使用场景UML和简单实现Android源码中的使用1.) ListView中的使用2.)BroadcastReceiver中的使用3.)EventBus中的使用总结...

2018-09-06 22:08:38 1558

转载 Git常用命令速查表(收藏大全)

转载这里名词master: 默认开发分支origin: 默认远程版本库Index / Stage:暂存区Workspace:工作区Repository:仓库区(或本地仓库)Remote:远程仓库一、新建代码库二、配置Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。三、增加/删除/...

2018-08-19 15:45:47 278

原创 Activity的启动模式以及栈管理

LaunchModeFlagsAMS栈管理

2018-08-17 13:19:23 696

原创 BroadcastReceiver注册和发送过程

前言BroadcastReceiver四大组件之一,作为应用内进程间的一种重要通信机制,能够将消息通过广播的形式传递给它注册的对应广播接收器的对象,那么它们之间信息的传递机制是如何的了?接下来就来从广播的注册以及发送两方面讲起,看下它们之间的代码执行过程。注册广播的注册调用的是Intent registerReceiver(BroadcastReceiver recei...

2018-08-13 19:46:23 1460

原创 工厂模式和抽象工厂模式以及在Android中的应用

《Android源码设计模式解析与实战》第5章第6章读书笔记工厂方法模式介绍工厂方法模式(Factory Pattern)创建型设计模式之一,在平时开发中或多或少都会使用它,如Android中的Activity里的各个生命周期方法,以onCreate方法为例,它就可以看作是一个工厂方法,在其中我们将构造的View通过setContentView返回给framework处理。总结来说...

2018-08-08 18:29:47 3494

原创 java基础-抽象类和接口

定义接口在面向对象编程中占着很重要的地位,它是对于一种事物行为的抽象提取,内部只需要持有接口的引用,外部可以根据具体事物做不同的扩展,而不修改内部的引用逻辑,它的主要作用是在框架中实现不同对象的相互引用解耦,而不是持有具体类的引用。在百度中对接口的定义:对接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被内部修改而不影响外界其他实体与其...

2018-08-07 11:58:08 238

原创 策略模式以及在Android中的应用

介绍在软件开发中,通常某一个功能可以有多种算法或者策略,我们需要根据不同的算法和策略完成该功能。针对这种情况,一种常规的方法就是将多种模式写在一个类中。然后通过if-else等条件判断语句来选择具体的算法。当多个算法集中在一个类中时,这个类就会变得臃肿,如果我们需要新增加一种策略,就需要修改这个类的源码,这就违反了OCP原则和单一职责原则。如果将这些策略和算法抽象出来,提供一个统一的接...

2018-08-06 13:52:27 814

原创 java线程池复习

在操作系统中,线程是操作系统调度的最小单位,同时线程又是一种受限的系统资源,即线程不可能无限地产生,并且线程的创建和销毁都会有相应的开销。所以就有了线程池的引入,它可以避免因为频繁创建和销毁线程所带来的系统开销。Android中的线程来源于java,主要是通过Executor来派生特定的线程池。优点: (1).重用线程池中的线程,避免因为线程的创建和销毁所带来的性能开销。 (2).能有效地...

2018-08-01 10:47:08 456

转载 精通Kotlin标准函数:run、with、let、also和apply

作者:liangfei 链接:https://juejin.im/post/5ac03b57f265da238532ffa4 来源:掘金一些 Kotlin 的标准函数非常相似,以至于我们都无法确定要使用哪一个。这里我会介绍一种简单的方式来区分他们的不同点以及如何选择使用。作用域函数接下来聚焦的函数有:run、with、T.run、T.let、T.also 以及 T.apply。...

2018-07-16 17:49:07 4178

原创 EventBus中HandlerPoster,BackgroundPoster,AsyncPoster的执行流程

前言在EventBus中有几种线程模式,这几种线程模式分别代表注册的方法可以运行在主线程,或者子线程,其中这几种线程模式之间的线程切换都是用HandlerPoster,BackgroundPoster,AsyncPoster实现的,这里就来分析下它们的具体实现,看下别人的设计思想。EventBus的ThreadModeThreadMode是一个枚举类,每个实例都是一种线程状态,...

2018-07-13 16:02:36 749 2

原创 EventBus中SubscriberInfoIndex的使用

前言EventBus使用起来还是很方便的,它的源码是基于反射实现的,在3.0之后增加了注解处理器,在程序的编译时候,就可以根据注解生成相对应的代码,相对于之前的直接通过运行时反射,大大提高了程序的运行效率,但是在3.0默认的还是通过反射去查找用@Subscribe标注的方法,一般在使用的时候基本都是这个模式//注册if (!EventBus.getDefault().isRegister...

2018-07-09 16:53:02 1516

转载 Java集合源码分析之开篇

作者:大大纸飞机 链接:https://www.jianshu.com/p/407afb4a267a 來源:简书 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。初衷Java集合是我们使用最频繁的工具,也是面试的热点,但我们对它的理解仅限于使用上,而且大多数情况没有考虑过其使用规范。本系列文章将跟随源码的思路,分析实现的每个细节,以期在使用时避免各种不规范的坑。在...

2018-06-22 19:33:41 432

转载 仿WanAndroid客户端Flutter版

作者:蓝胖子的猫 链接:https://juejin.im/post/5b1e446be51d45068f65d5e9 来源:掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。前言谷歌在今年的I/O大会提了Flutter,觉得有可能是一个趋势。 在学习了基本的Dart语法以及Flutter常用Widget的基本使用之后就开始慢慢按捺不住了,决定模仿Fl...

2018-06-22 19:15:18 832

原创 Retrofit源码流程解析(二)

        上一篇讲了Retrofit的请求流程,对框架的大致调用过程做了了解,地址在这里Retrofit源码流程解析(一),这一篇打算讲解具体调用Okhttp3的过程,以及数据请求完成对数据的解析过程。这一过程都集中在OkHttpCall这个类中,更将详细的话还是回调到其它类中。接下来还是结合具体源码来讲解。我们知道Retrofit有execute同步和enqueue异步两种请求方式,分别都...

2018-05-11 18:30:36 389

原创 Retrofit源码流程解析(一)

17年就打算好好读下Retrofit的源码的,后来由于种种原因耽搁了,现在终于有时间来写博客记录下自己读源码的总结了。Retrofit是一套网络请求封装库,底层网络请求还是OkHttp,它只是让请求的方式变成接口的描述方式,源码虽然不多,但是是设计模式的典范,里面结合各种设计模式,以及许多优秀的设计思想,非常值得阅读的。一、环境Retrofit下载地址,它是用Maven构建的,至于工具...

2018-04-22 22:53:40 326

原创 TakePhoto框架源码流程解析(三)

在上一篇文章中介绍了TakePhoto的常见api,这一篇打算介绍下TakePhoto的图片压缩解决方案,TakePhoto的图片压缩有两种方案,一种是第三方压缩工具LuBan,另一种是自带的图片压缩方案,自身的图片压缩方案分为尺寸压缩和质量压缩,关于图片压缩的更详细的文章可以看这里。接下来将结合源码介绍下TakePhoto中这两种图片压缩方案的实现过程。 入口调用图片无论是拍照...

2018-02-08 23:36:21 713

原创 TakePhoto框架源码流程解析(二)

上一篇TakePhoto框架源码流程解析(一)地址,这一篇打算详细介绍下TakePhotoImpl的使用,毕竟是TakePhoto的核心类,所有的调用都会回调到这个类中,所以还是有必要学习下,对自己的编程能力还是有很大提升的。在上一篇介绍到,当我们调用接口的某个方法时,都会走动态代理的TakePhotoInvocationHandler的invoke方法,最后会回调到TakePhotoImpl

2018-01-28 18:38:37 966

原创 TakePhoto框架源码流程解析(一)

在我最近一年接触的项目中,一直都会接触到一个功能就是图片的拍摄与选取,对于Android系统,各个厂家对于手机系统都会有不同的功能定制,导致碎片化一直很严重,写出的同一套程序,也许两个不同的手机上都会有不同的效果,也许有的手机上根本无反应,这一直是需要解决的问题。TakePhoto简介我在做这一功能时候,一直都是用的github上的一框架TakePhoto,这框架对于android的拍

2018-01-20 19:39:47 2974 1

转载 Android 约束布局(ConstraintLayout)详解

本篇文章转载自Android 约束布局(ConstraintLayout)详解最近项目中用到了约束布局,正好看见了这篇文章,讲得还行,就转载过来了,以后方便新增新功能。本篇 ConstraintLayout 讲解版本:1.0.2前言ConstraintLayout 是一个 ViewGroup,它的出现是为了解决复杂布局时,布局嵌套(布局内的布局)过多的问题(嵌套布局会增加绘制界

2018-01-13 23:17:22 1060

react版的TodoList

todoList学习使用,

2019-03-31

ContentProvider使用

ContentProvider学习使用

2016-12-04

空空如也

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

TA关注的人

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