自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Android动画学习

1. 补间动画补间动画具体有四种如下图所示:有两种实现方式:XML和java//xml实现方式://1.定义一个xml <?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:fromXDelta="0" android:fromYDelta="0" andr

2021-07-07 21:53:12 306 6

原创 View体系学习之绘制流程

1. onMeasure过程1.1 View首先介绍的是View的Measeure过程.从measure方法说起,他是View内部的一个方法,并且用final修饰.他是View对象Measure过程的起始点:public final void measure(int widthMeasureSpec, int heightMeasureSpec){ ... // 如果强制执行layout或者需要layout的情况 if (forceLayout || needsLayout)

2021-06-11 00:43:36 150 2

原创 View体系学习之事件传递

1 源码分析1.1 事件分发所要经过的对象首先从三个常见的对象开始分析:Activity ==> Window ==> ViewGroudp ==> View手指触摸屏幕首先碰到的是Activity,然后再一步步传下去。每一步都有可能被拦截并且返回。有个比较形象的比喻就是Activity是老板,Window是技术经理(本身也是技术能手),ViewGroup像是组长(本身也是技术能手),View是具体的员工。老板发布任务,技术经理查看并交给组长,组长查看再交给员工。中间随时都有

2021-06-07 01:13:16 144

原创 View体系学习之Activity构成

前言鉴于最近接触UI会比较多。先对次做一个初步的了解,以便能快速融入项目。学一个东西我比较喜欢从熟悉的入手,那Activity应该是Android开发中最熟悉的东西了。无论是对于View学习还是Dialog等的理解,Activity的结构熟悉都极有好处。本文只是做一个初步的了解。源码分析先从Activity最常用的setContentView入手:@Overridepublic void setContentView(@LayoutRes int layoutResID) { getDel

2021-06-02 01:39:29 129

原创 组件化学习之初识组件化

1 背景随着项目的增加,弊端也随之而来:不同的App之间有大量的重复功能代码之间耦合太严重,改了一部分代码却影响到了其他不相关的代码第三方开源框架版本不统一而且不同的app要开启不同的工程,开发起来极其麻烦项目编译起来时间越来越长2 整体框架针对以上问题对项目进行了重构。将通用功能封装起来、根据不同业务分为不同的组件以及用gradle统一进行项目构建。如下所示:整体的架构分为三层,越底层变动的频度越低:基础层:主要是开源的第三方开源框架或者第三方SDK。这些基本是不会改动的,除非有特殊

2020-12-15 00:52:23 205 1

原创 OkHttp源码解析之重试重定向、桥、缓存

1.重试/重定向拦截器RetryAndFollowUpInterceptor 作用是连接失败后重试或者进行重定向。代码如下:@Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); RealInterceptorChain realChain = (RealInterceptorChain) chain; Transmitter

2020-11-17 00:54:51 655

原创 OkHttp源码解析之网络连接与请求

1 网络的建立1.1 获取可用的连接网络的建立由ConnectInterceptor拦截器完成,那么先看下该拦截器的实现:// We need the network to satisfy this request. Possibly for validating a conditional GET.// 顾名思义。如果不是GET的时候,那么就用doExtensiveHealthChecks来判断是否要进行额外的检查。boolean doExtensiveHealthChecks = !reque

2020-11-15 20:21:09 313

原创 OkHttp源码解析之请求数据与回调

1 使用首先从一个简单使用例子开始入手,下面的是源码中的一个例子: OkHttpClient client = new OkHttpClient();//步骤1 // Create request for remote resource. Request request = new Request.Builder() .url(ENDPOINT) .build();//步骤2 // Execute the request and retriev

2020-10-09 02:13:36 809

原创 Retrofit源码解析之网络请求

1 解析注释并生成ServiceMethod对象首先从Retrofit的create动态代理开始分析ServiceMethod<?> loadServiceMethod(Method method) { ServiceMethod<?> result = serviceMethodCache.get(method); if (result != null) return result; synchronized (serviceMethodCache)

2020-09-30 01:44:47 169

原创 Retrofit源码解析之整体流程解析

1 前言本文从流程的角度分析了Rtrofit的请求以及回调过程,对代码结构会有一个比较清晰的认知,具体的功能并没有跟进去。这样子的好处是不至于由于某个或者某几个具体功能的解析而使得整个思绪变得混乱。下一篇会对各个具体的功能各个击破,比如说注解解析等。2 构建Retrofit对象Rtrofit的一大特色就是可以配置各种工厂。比如说RxJavaCallAdapterFactory那么结果便可以生成Observer对象,你就可以方便的使用Rxjava来处理数据了。再比如说你也可以用protobuf或者gso

2020-09-26 23:56:35 117

原创 Retrofit源码解析之概括总览

1 前言首先,Retrofit是对OkHttp作了进一步的封装,网络请求的本质还是通过OkHttp来完成。其次,Retrofit运用了大量的设计模式,使得整体框架显得整洁明了。其中通过适配器模式甚至可以直接兼容Rxjava。2 注解Retrofi的一大特色就是应用了大量的注解。这些注解可分为三大部分:2.1 网络请求方法的注解从get到options对应着HTTP中的网络请求方式,其中最常用的应该是@GET以及@POST这两个注解了。可以这样子比喻。TCP相当于高速公路,GET相当于送急件的

2020-09-23 22:46:31 92

原创 Kotlin学习笔记之剩余部分

1. 解构声明首先看下写法:val (name, age) = person。其中name以及age可以单独使用。println(name)println(age)解构声明也可以用在for循环中:for ((a, b) in collection) { …… }如果解构出来的变量如果有某个参数不会使用,那么可以使用_来替换。val (_, status) = getResult()解构也可以用在lambda中的参数:map.mapValues { entry -> "${ent

2020-08-03 00:17:25 280

原创 Kotlin学习笔记之集合

1.集合概述kotlin集合主要有三类List 是一个有序集合,可通过索引(反映元素位置的整数)访问元素。Set 集合中的元素是唯一的,不可重复。Map(或者字典)是一组键值对。1.1 集合类型集合结构可以用以下两种归纳来区分:一个 只读 接口,提供访问集合元素的操作。一个 可变 (可读可写)接口,通过写操作扩展相应的只读接口:添加、删除和更新其元素。而集合的只读并不是通过val来修饰,也就是说并不能使得该集合只读。他只是保障了该集合的引用是不可变的,如下所示:val n

2020-08-01 17:44:42 681

原创 kotlin读书笔记之类与对象

1. 类与继承1.1 类的用法与java一样使用class声明类,后面可以跟着大括号:class Invoice { /*……*/ }class Empty1.2 构造函数kotlin可以有一个构造函数以及多个次构造函数。主构造函数是类头的一部分,跟在类头后面:class Person constructor(firstName: String) { /*……*/ }如果主构造函数没有任何注解或者可见性修饰符,那么可以省略constructor。class Person(firstNa

2020-06-22 02:46:13 214

原创 kotlin读书笔记之基础语法

1.初识Kotlin1.1 变量变量的定义写法上和java差别挺大的。变量分为可读以及可读可写,而且kotlin会自动推测出变量的类型,可推测的情况下。val a: Int = 1 // 立即赋值val b = 2 // 自动推断出 `Int` 类型val c: Int // 如果没有初始值类型不能省略c = 3 // 明确赋值var x = 5 // 自动推断出 `Int` 类型x += 11.2 字符串模板这个有点向shell脚本,比java更加的直观方便。v

2020-06-18 23:10:01 163

原创 Kotlin读书笔记之内联函数、扩展函数、匿名函数、lambda

本文主要涉及内联函数、扩展函数、lambada以及匿名函数等。作为读书笔记对于细节深入没有过多的扩展,后续将对于各个知识点作进一步的研度。本文的内容主要是参考官方教程以及博客内容,作为读书笔记以及后续知识点扩展的一个大纲。学海无涯,希望能在Android这条路上越走越远!1.内联函数1.1 内联函数的使用首先看个例子,一个是用了inline修饰,另一个没有: init{ functionWithInline() functionWithoutInline().

2020-06-17 00:12:48 571

原创 kotlin读书笔记之函数基本知识以及泛型

1.函数内容1.1 函数的声明与用法kotlin的函数使用fun关键字声明,如下所示:fun double(x: Int): Int { return 2 * x}double(2).tostring()1.2 函数参数和java不一样,kotlin的函数参数采用pascal表示法定义,即 name: type。fun powerOf(number: Int, exponent: Int) { /*……*/ }kotlin可以设置默认参数:fun read(b: Array&

2020-05-29 00:29:40 150

原创 学习开源播放器代码解析之参数设置

1.前言  出于学习音视频的目的,在Github找了个基于FFMPEG的播放器代码,代码量比较小。地址:fflayer。于是乎下载编译了下,运行结果良好。So,出于学习的目的,写写学习笔记,归纳归纳。该开源代码使用的ffmpeg函数有些被标记成过时的换成最新的会出现闪屏以及看直播时视频声音不同步等各种问题。在后续解析完再慢慢琢磨怎么解决这些问题以及自己可以尝试写个简易播放器加深理解。2.源...

2020-03-07 21:11:15 510

原创 设计模式之单例模式

前言单例模式是设计模式中最常用的一种,也可以说是最基本的。最常见的可以分为7种,涉及到JVM以及并发编程的特性。饿汉式public class Singleton{ private Singleton(){ } private static Singleton instance = new Singleton(); public st...

2019-11-06 22:54:46 74

原创 读书笔记之AfinalBitmap源码分析

前言在项目中会用到Afinal框架,感觉很方便也挺稳定的。他有四部分功能:FinalActivity、FinalBitmap、FinalDb、FinalHttp。本篇分析FinalBitmap原理,如有错误欢迎指出!源码分析1.FinalBitmap的用法先是新建一个对象,然后做一些配置。mFinalBitmap = FinalBitmap.create(RadioApplication...

2019-02-02 02:53:30 345

原创 读书笔记之Launcher图标排序小结

本文记录下以前修改Launcher需要涉及到的地方,方便后续查询。1、默认XML文件以及意义default_workspace_2x7.xml默认会加载这个布局文件。那打开该文件看一下:&amp;amp;amp;amp;amp;amp;amp;lt;resolve launcher:screen=&amp;amp;amp;amp;amp;amp;quot;-401&amp;amp;amp;amp;amp;amp;quot; launcher:x=&

2019-01-31 11:41:31 779

原创 读书笔记之SystemUI分屏浅析

前言以前改过一个分屏的需求,跟了一下SystemUI的代码。在这边做一下记录,方便后续做一些更细化的理解拓展。预备知识1、SystemUI中的EventBus该EventBus用于不同类之间的消息传递,至于原理有空在看。这边说说使用吧,很简单。注册与解注册: @Override protected void onAttachedToWindow() { super.onA...

2019-01-30 21:30:52 1567 2

原创 读书笔记之线程池ThreadPoolExecutor使用以及源码整体分析

前言平时在项目中经常会用到ThreadPoolExecutor来多线程操作,通过重复利用已创建的线程,降低创建和销毁线程造成的系统资源消耗。本文介绍了ThreadPoolExecutor的使用以及整体的一个框架流程。至于很多细节后续慢慢再去理解。ThreadPoolExecutor的使用1.线程池的使用1.1 线程池的创建首先看下构造函数:public ThreadPoolExecut...

2019-01-25 20:39:13 192

原创 MVC/MVP/MVVM浅析

前言随着项目的需求增加,代码的堆积会造成整个程序臃肿不堪。那么就急切需要了解些实用的架构设计,优化代码结构以及增加扩展性。本文将介绍MVC、MNP、MVVM以及简要介绍下MVVM要使用到的DataBinding双向绑定。MVC架构Android原生开发采用XML文件实现页面布局,在Activity中利用Java编写业务逻辑,这种开发模式实际上已经采用了MVC的思想,分离视图和控制器。MVC模...

2019-01-07 21:59:12 1198 1

原创 ActivityThread源码解析之Handler机制

前言本文分析了Hander几个重要类以及他们之间的关系。Handler是Android SDK来处理异步消息的核心类。子线程与主线程通过Handler来进行通信。同时在应用的整个生命周期里也起着至关重要的作用。源码分析ActivityThread中也使用到了Looper循环,那么看下它里面是怎么使用。先看下ActivityThread的main函数里面:public static vo...

2019-01-05 00:06:45 724

原创 ActivityThread源码解析之Application与Activity启动

前言在看ActivityThread源码的时候,看到有博客提到它承担着整个应用的运转以及生命周期。于是很好奇想一探究竟,跟着跟着大概就把应用启动过程过程了解了一下。这篇文章主要是介绍ActivityThread中有关于应用启动过程以及Activity启动部分。有关Binder的机制或者其他部分内容太多了,以后专门看看。源码分析Activity有且只有一个ActivityThr...

2019-01-03 16:56:29 1413

原创 AIDL浅析

前言该篇文章对AIDL进行了初步的分析。通过aidl自动生成代码分析了不同进程间是如何通信的以及参数使用in、out、inout修饰的具体作用。源码分析1、AIDL的使用先稍微看下AIDL的使用。IDE会根据aidl 文件自动生成代码,而这些代码就是服务端与客户端之间沟通的桥梁。就比如说中国人和日本人语言无法交流,怎么办呢?那么需要英语作为中间语言,AIDL就充当了英语的角...

2018-12-31 18:13:44 335

原创 HashMap浅析

前言HashMap是基于哈希表的Map接口的实现,它对数组以及链表做了综合考虑。在看Handler源码的时候看到需要了解这方面的知识,于是乎就了解下顺便写个博客加深理解。本文只对JDK7的HashMap源码进行分析,后续版本的红黑树先不考虑。相关知识数组:采用一段连续的存储单元来存储数据。他的主要特点是:查找速度快,插入和删除效率低,内存空间要求高,必须有足够的连续内存空间。...

2018-12-27 22:51:12 193

原创 EventBus源码解析之事件分发

前言本文主要介绍注册时候的事件分发逻辑以及调用者直接使用post触发的事件分发逻辑,以及过程中碰到了一些疑点的理解过程。源码分析1、注册中的粘性事件分发先贴上注册subscribe方法里面的粘性事件代码部分:if (subscriberMethod.sticky) { if (eventInheritance) { // Existing sti...

2018-12-21 21:11:31 440

原创 EventBus源码解析之注册

前言前面介绍了Eventbus的构造器,部分参数以及属性在注册时候也会用到。所以了解构造函数中Build的各个属性对后续也是有颇多帮助。有关于粘性事件的处理涉及到了事件分发,所以移到后续的EventBus之事件分发中分析。源码解析1、概括介绍首先注册的总入口还是在Eventbus.java文件里。注册分为两个步骤:第一步是根据类的类型查询符合条件的所有方法,第二步是订阅遍历到的信...

2018-12-19 15:02:11 280

原创 EventBus源码解析之构造器

前言EventBus的构造方法涉及到属性的初始化,以及一些重要参数的赋值、重要标志位的获取。代码分析1、EventBus构造EventBus的构造采用单例模式中的双检锁/双重校验锁方式,这种方式是多线程安全的。代码如下所示:static volatile EventBus defaultInstance;public static EventBus getDefault() { ...

2018-12-17 17:41:36 101

原创 EventBus源码解析之概括分析

前言与概述之前接触过CanBus相关的项目,大概的模型就是数据的发送与接收。代码中到处调用Handler以及静态对象,代码显得臃肿而且解耦方面做的不好,代码可读性差。于是思索着不重复造车,找了下相关开源代码。Evenbus的两个特性挺符合需求的:一个是代码量少,几行代码搞定功能,一个方法以及注解就满足了功能实现和线程的切换。另一个是解耦做的很好,接收处理数据与逻辑处理的交互交给EventBus...

2018-12-16 23:47:40 147

原创 搭建软件运行平台以及IDE环境

     一、前述     开发板:Android7.1.1开发平台(附带Android7.1.1系统源码)     PC:win10操作系统     IDE:AndroidStudio     使用软件:VisualBox虚拟机,Ubuntu18.04稳定版系统     Android系统界面交互定制有一大部分内容修改的是SystemUI、Launcher系统应用。比如说修改...

2018-12-13 11:41:42 1562

空空如也

空空如也

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

TA关注的人

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