自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 资源 (2)
  • 收藏
  • 关注

原创 JNI基础之基于bsdiff库的增量更新

前言传统的APP更新,每一次产品迭代,都需要用户下载新的完整apk安装包后,重新安装。当apk的体积达到一定程度时,这种更新就会特别的浪费时间和流量,同时也影响用户体验。针对这一问题,目前市场上出现了很多热更新、热修复等技术如阿里的Anfix、腾讯的Tinker框架等。其中,腾讯的Tinker框架实现原理上,就用到了开源的文件差分工具bsdiff/bspatch。我们今天就来介绍一下基于bsd...

2018-12-27 10:46:20 688

原创 JNI基础之JNIEnv,jclass和jobject

在上一篇文章中,简单的介绍了eclipse下生成jni头文件以及java调用C语言的流程,其中,在生成的头文件方法声明中,需要传入一个JNIEnv类型的变量,这里我们就来看一下JNIEnv这个变量类型JNIEXPORT jstring JNICALL Java_com_will_jni_JNITest_getStringFromC (JNIEnv *, jclass);JNIEnv ...

2018-12-20 17:32:32 4110 1

原创 JNI基础之java调用jni函数

一、JNI:JNI是java native interface的缩写,翻译过来是java本地开发接口,JNI是一种协议,它允许java和其他语言(主要是C和C++)进行交互,如java调用C和C++代码,同时C和C++代码也可以调用java的代码。JNI优点:效率上 C/C++是本地语言,比java更高效 代码移植,如果之前用C语言开发过模块,可以复用已经存在的c代码 java反...

2018-12-17 15:04:16 1065

原创 JNI基础之C动态内存分配

当我们在运行下面一段代码时,会抛出stack overflow的异常:#include <stdio.h>void main(){ int i[1024 * 1024 * 10]; getchar();} 这个错误直译过来就是栈溢出,这里面就涉及到C语言的内存区域的分配问题。C语言内存区域划分1、栈区(stack) 先进后出的内存结构,所有的自动变...

2018-12-17 14:09:59 750

原创 OkHttp 源码分析(五)——ConnectInterceptor

0、前言在前面的文章中,我们分析了http的缓存策略和Okhttp缓存拦截器的缓存机制,我们知道,在没有缓存命中的情况下,需要对网络资源进行请求,这时候拦截链就来到ConnectInterceptor。ConnectInterceptor的主要作用是和服务器建立连接,在连接建立后通过okio获取通向服务端的输入流Source和输出流Sink。1、源码分析public Respon...

2018-11-12 11:06:23 236

原创 OkHttp 源码分析(四)——CacheInterceptor

前面简单分析了retryAndFollowUpInterceptor和BridgeInterceptor这两个拦截器的处理流程,今天来分析Okhttp的第三个拦截器CacheInterceptor:缓存拦截器的代码逻辑。在上源码前,先来熟悉下关于http的缓存机制。1、Http缓存机制http大致可划分成两种缓存规则:1、强缓存;2、协商缓存。 强缓存当客户端存在缓存数据时,再次发...

2018-09-13 21:18:39 408

原创 OkHttp 源码分析(三)——BridgeInterceptor

在上一篇文章中,我们简单分析了OkHttp的第一个拦截器RetryAndFollowUpInterceptor的处理流程,主要工作是创建了一个streamAllocation,并将streamAllocation和request传给下一个拦截器:BridgeInterceptor进行处理,并根据网络请求中的异常或响应结果判定是否需要进行重连。所以,今天我们来分析BridgeIntercept...

2018-09-11 23:02:54 184

原创 OkHttp 源码分析(三)——RetryAndFollowUpInterceptor

 一、前言在上一篇文章中,简单分析了拦截器和拦截链的调用过程,简单概括起来就是拦截器的intercept方法中,对Request进行处理,并将处理后的Request传递给下一个拦截器,获取下一个拦截器返回的Response响应后,再对Response进行处理,并返回给上一级拦截器,而Okhttp中真正的网络请求,就是在这一系列的拦截器中完成的。而Okhttp框架提供的内部拦截器是从Retr...

2018-09-05 22:35:26 231

原创 Okhttp源码分析(二)——初识拦截器

在上一篇文章中,我们简单介绍了Okhttp的同步和异步执行流程,而在同步和异步请求中,是通过getResponseWithInterceptorChain()这个方法来进行网络请求的。在上一节中提到这个方法是调用Okhttp提供的拦截器来进行真正的网络请求的,那么什么是拦截器?拦截器概念官方是这样定义的:拦截器是OkHttp中提供的一种强大机制,它可以实现网络监听、请求以及响应重写、...

2018-09-03 20:07:03 199

原创 OkHttp 源码分析(一)

一、简介OkHttp是一个优秀的网络请求框架,它是由Square公司开发的。从Android4.4版本后,Okhttp也被纳入了google源码中,目前比较流行的Retrofit框架,底层也是用OkHttp实现的,OkHttp框架的性能和重要性不言而喻。二、使用流程我们先来看看一个Okhttp的网络请求的简单流程: OkHttpClient client = new...

2018-09-02 17:25:25 253

原创 implementation、api与多模块依赖

自从gradle升级3.+版本后,gradle原来的依赖方法全部都被替换了,之前的compile替换成了implementation和api,新建工程时发现gradle默认使用的也是implementation。而最近使用多模块依赖时,发现app模块使用implementation依赖子模块时,无法直接访问子模块依赖的库,于是查了下文档: 从文档可以看出,当使用a模块implementat...

2018-08-28 21:06:43 8343 2

原创 Activity的四种启动模式

    今天,我们来说一说Android的Activity的四种启动模式:standard、singleTop、singleTask和singleInstance。    在说这四种启动模式之前,我们先来介绍一下任务栈(Task)的概念。Android的任务栈是一个“后进先出”栈结构,用来管理我们APP的Activity,Android系统通过任务栈来决定哪一个Activity可以和用户交互,而只...

2018-06-07 22:40:50 179

原创 Android事件分发机制(2)——从源码角度分析

    在上一篇博客中,我们以实例的形式介绍了Android的事件分发机制的三个关键函数:dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent。今天,我们从源码的角度来分析Android的事件分发机制的具体实现。    在上一篇博客我们知道,Android的触屏事件首先是从Activity的dispatchTouch Event开始分发的,所以...

2018-06-05 22:31:26 134

原创 Android事件分发机制(1)——从源码角度分析

一、前言这两天在写一个自定义控件,继承了ViewGroup,需要对子View做一个事件分派的控制,之前用的onTouchEvent事件比较多,对于android的事件分发体系很早之前有了解过,很久没用就忘记了,今天在这里记录总结下。首先放上一张事件分发流程图(之前摘自网上的一篇博客,忘了哪一篇了)从上图我们可以看到事件的分发流程是从 Activity(Window)——>ViewGroup—...

2018-06-02 22:46:28 221

空空如也

空空如也

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

TA关注的人

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