![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
文章平均质量分 94
十 月
人生如梦
展开
-
关于HashMap中的hash算法
一、关于Hash表和Hash函数Hash表也称散列表,直译为哈希表,hash表是一种根据关键字值(key-value)而直接进行访问的数据结构。在哈希表的键值对关系中,key到value中间还存在着一个映射值,这个映射值就是数组的下标index,key正是通过映射到数组对应的下标index而访问到value值的,但key又是如何映射到数组下标的呢?这就要通过一个映射函数f(key),这个函数我...原创 2019-12-21 03:49:57 · 6169 阅读 · 0 评论 -
RxJava 2.x 源码分析(一) 分发订阅流程
本文将讲解两个知识点1.RxJava的数据分发和接收流程,即Observable(可观察者)如何分发数据和Observer(观察者)如何订阅数据2.RxJava是如何通过Disposable来取消订阅的,让Observer中断接收Observable分发的数据一:RxJava2.x的数据分发和接收通过一个简单的例子来看看RxJava的使用 //1.为了方便理解...原创 2019-01-14 12:35:19 · 453 阅读 · 0 评论 -
Android系统的启动过程
Android系统是基于Linux内核的,所以当手机启动的时候,首先是Linux内核的启动,而Linux为Android系统启动的第一个进程是init进程一、init进程init是Linux系统启动的第一个用户进程, 它的进程号是1init进程的入口函数是main,它主要做了这些工作:1)解析配置文件,主要是系统配置文件和硬件平台相关的配置文件,同时也会解析service 其...原创 2019-01-20 01:57:51 · 649 阅读 · 0 评论 -
RxJava 2.x 源码分析(三) 变换操作符map和flatMap
RxJava的操作符有很多,一般常用的有变换操作符,其中最主要是map和flatMap,本文将分别来讲解一下它们的实现原理。在上一篇文章:RxJava 2.x 源码分析(二) 线程切换原理中,讲到RxJava框架的执行流程,理解这个对我们源码的阅读是有很大帮助的,所以如果你还不懂的话,请移步到上一篇文章去读一下一:map的实现原理老规矩,先上一个例子: Observable.c...原创 2019-01-15 15:51:53 · 304 阅读 · 0 评论 -
Android性能优化(一)App启动时间的优化
一:App启动方式1、冷启动:当启动应用时,后台没有该应用的进程,系统要重新创建一个新的进程分配给该应用,这种启动方式就是冷启动。冷启动首先会为应用创建一个新进程,然后创建并初始化Application和Activity,最后将界面显示出来2、热启动:当启动应用时,后台已经存在该应用的进程(比如:按Home键、Back键的时候,应用虽然退出了前台,但后台依然保存着应用的进程),这种情况下,...原创 2019-01-22 18:12:21 · 1667 阅读 · 0 评论 -
百度地图打包成的aar文件使用MapView报错
项目中用到百度地图的开发,然后想把地图相关的代码上传到maven当做库来使用,但是引用库文件的模块中使用百度地图MapView控件的时候, 报如下错:Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class com.baidu.mapapi.map.MapView百思...原创 2019-05-28 17:31:14 · 860 阅读 · 2 评论 -
EasySocket一款轻量级的Android端Socket框架
源码地址:https://github.com/jiusetian/EasySocketEasySocket的初衷是希望使Socket编程变得更加简单、快捷,因此项目在实现了Socket基本功能的基础上,还实现了TCP层面的请求回调功能。传统的Socket框架客户端发出一个请求信息,然后服务器返回一个应答信息,但是我们无法识别这个应答信息是对应哪个请求的,而EasySocket实现了将每个请求...原创 2019-06-12 19:46:26 · 28158 阅读 · 83 评论 -
Android NDK开发崩溃signal 11 (SIGSEGV), code 1 (SEGV_MAPERR) 的解决方法
一.前言在NDK开发的过程中,如果遇到应用Crash的情况,JNI层的报错信息并不像java层那样可以直接看到错误信息和错误的位置,如果要想定位的到错误的位置,需要借助NDK的一些工具进行地址转换,本文中用addr2line(NDK的工具)来捕捉错误信息二.分析 以下是我的报错信息读取其中的关键信息1.错误代号:signal 11 (SIGSEGV), cod...原创 2019-10-10 15:51:36 · 46966 阅读 · 10 评论 -
Android属性动画源码解析
属性动画是Android开发中常用的知识,网上大多数文章都是关于属性动画的用法,本文从源码角度去分析一下属性动画的原理属性动画有两个非常重要的类,分别是ObjectAnimator和ValueAnimator,其中前者继承了后者,前者是对后者更进一步的封装,方便开发者使用。属性动画常见的用法如下ObjectAnimator animator = ObjectAnimator.ofFloa...原创 2018-11-13 17:23:51 · 392 阅读 · 0 评论 -
Android属性动画的用法
Android动画的实现方式有三种:属性动画、补间动画、逐帧动画。其中属性动画是指在一定的时间间隔内,通过改变目标对象的属性值而达到动画效果,相比于其他两种动画方式,灵活性大。而补间动画,通常是局限于View对象,而且不能改变View的属性,只是通过改变视觉效果来达到动画效果,这种局限使得补间动画的效果单一,无法跟属性动画相媲美。所以说学好属性动画非常重要属性动画有两个非常重要的类:Value...原创 2018-11-14 14:42:56 · 218 阅读 · 0 评论 -
Android消息机制(Handler、MessageQueue和Looper三者的工作原理)
Android的消息机制中有三个重要的类:Handler、MessageQueue和Looper。其中MessageQueue是先进先出的消息队列,它存储一组消息,有插入和删除的功能;Looper是循环的意思,主要功能是轮询MessageQueue里面的消息,然后交由Handler处理,如果暂时没有消息,则会等待;Handler主要统筹Looper和MessageQueue的功能,实现消息的发送和...原创 2018-12-01 14:53:34 · 962 阅读 · 0 评论 -
Android自定义View(四)Path之贝塞尔曲线
一、概述1、贝赛尔曲线来源在数学的数值分析领域中,贝赛尔曲线(Bézier曲线)是电脑图形学中相当重要的参数曲线。更高维度的广泛化贝塞尔曲线就称作贝塞尔曲面,其中贝塞尔三角是一种特殊的实例贝塞尔曲线于1962年,由法国工程师皮埃尔·贝塞尔(Pierre Bézier)广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计。贝塞尔曲线最初由Paul de Casteljau于1959年运用de ...原创 2019-01-09 17:33:05 · 4050 阅读 · 1 评论 -
Retrofit 2.0源码解读
Retrofit是基于OKhttp实现的网络请求框架,是对OKhttp的优秀封装,使用起来更加方便、简洁,特别还提供了RxJava的支持。Retrofit框架中采用了大量的设计模式来实现超级解耦,所以本文的初衷希望通过Retrofit源码的解读,来学习一下作者优秀的设计思想一个Retrofit网络请求,一般会经历如下步骤:1.创建Retrofit实例对象,配置请求相关参数,比如URL、请求...原创 2018-12-20 17:45:32 · 252 阅读 · 0 评论 -
OKHttp 3.10源码解析(四):连接机制
OKhttp的底层用的是Socket连接而不是URLConnection,所以整体来说还是比较复杂的,涉及到Http协议的封装和解封装、TLS/SSL安全协议的封装、Http2的封装等等,但还是非常值得我们去学习一下的,本篇文章不会对这些底层原理有详细的解析,但读完之后至少大概知道在网络请求中这些底层是如何实现的一.HTTP请求的优化1.keep-alive机制我们知道,一个HTTP的...原创 2018-12-14 22:55:03 · 1147 阅读 · 0 评论 -
OKHttp 3.10源码解析(三):缓存机制
本篇讲解OKhttp的缓存机制,在网络请求中能合理地利用本地缓存可以减少网络开销,提高响应速度。Http报头定义了很多有关控制缓存策略的域,因为OKhttp的缓存机制终究也是基于Http的缓存策略来实现的,所以我们先来认识一下Http的缓存策略一.HTTP缓存策略Http缓存有多种规则,根据是否需要向服务器发起请求将缓存分为两大类:强制缓存和对比缓存强制缓存是服务器会给客户端一个资源的...原创 2018-12-13 14:59:21 · 561 阅读 · 0 评论 -
OKHttp 3.10源码解析(二):拦截器链
本篇讲解OKhttp的拦截器链,拦截器是OKhttp最大特色之一,通过拦截器链,可以拦截到请求数据或响应数据并对它们进行相关处理,我们还可以自定义拦截器interceptor上篇文章中我们讲到,不管是OKhttp的同步请求还是异步请求,最后都会调用getResponseWithInterceptorChain来完成请求,那么本篇文章就从这个方法开始,来分析OKhttp的拦截器链策略的实现...原创 2018-12-12 10:32:04 · 451 阅读 · 2 评论 -
OKHttp 3.10源码解析(一):任务请求
OKhttp是目前Android端最热门的网络请求框架之一,它以高效的优点赢得了广大开发者的喜爱,以下是OKhttp的主要特点:1.支持HTTPS/HTTP2/WebSocket2.内部维护线程池队列,提高并发访问的效率3.内部维护连接池,支持多路复用,减少连接创建开销4.透明的GZIP处理降低了下载数据的大小5.提供拦截器链(InterceptorChain),实现reque...原创 2018-12-11 18:08:36 · 1797 阅读 · 2 评论 -
Android的Window工作机制
在Android中Window表示一个窗口,像我们日常使用的Activity就会有一个Window实例,用它来管理Activity中的视图呈现。Window其实是一个抽象类,它的具体实现类是PhoneWindow,每一个视图View的呈现都需要Window来实现,也可以说View是Window的实体存在既然Window涉及到视图View的呈现,那么里面必然会有View的绘制行为,我们知道Vie...原创 2018-12-03 16:25:01 · 506 阅读 · 0 评论 -
Android自定义View(五)Matrix应用详解
上次我们讲到了Matrix的原理,知道了Matrix内部其实就是通过矩阵计算去映射坐标变化的,还有矩阵前乘和后乘的区别等等这篇文章主要讲解Matrix相关方法的使用,先来看一下matrix主要有哪些方法,如下表:方法类别 相关API 摘要 数值操作 set reset setValues getValues 设置、 重置、 设置数值、 获取数值 数值计...原创 2019-01-10 23:20:27 · 1031 阅读 · 0 评论