- 博客(14)
- 资源 (2)
- 收藏
- 关注
原创 JNI基础之基于bsdiff库的增量更新
前言传统的APP更新,每一次产品迭代,都需要用户下载新的完整apk安装包后,重新安装。当apk的体积达到一定程度时,这种更新就会特别的浪费时间和流量,同时也影响用户体验。针对这一问题,目前市场上出现了很多热更新、热修复等技术如阿里的Anfix、腾讯的Tinker框架等。其中,腾讯的Tinker框架实现原理上,就用到了开源的文件差分工具bsdiff/bspatch。我们今天就来介绍一下基于bsd...
2018-12-27 10:46:20
738
原创 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
4200
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
1109
原创 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
793
原创 OkHttp 源码分析(五)——ConnectInterceptor
0、前言在前面的文章中,我们分析了http的缓存策略和Okhttp缓存拦截器的缓存机制,我们知道,在没有缓存命中的情况下,需要对网络资源进行请求,这时候拦截链就来到ConnectInterceptor。ConnectInterceptor的主要作用是和服务器建立连接,在连接建立后通过okio获取通向服务端的输入流Source和输出流Sink。1、源码分析public Respon...
2018-11-12 11:06:23
275
原创 OkHttp 源码分析(四)——CacheInterceptor
前面简单分析了retryAndFollowUpInterceptor和BridgeInterceptor这两个拦截器的处理流程,今天来分析Okhttp的第三个拦截器CacheInterceptor:缓存拦截器的代码逻辑。在上源码前,先来熟悉下关于http的缓存机制。1、Http缓存机制http大致可划分成两种缓存规则:1、强缓存;2、协商缓存。 强缓存当客户端存在缓存数据时,再次发...
2018-09-13 21:18:39
452
原创 OkHttp 源码分析(三)——BridgeInterceptor
在上一篇文章中,我们简单分析了OkHttp的第一个拦截器RetryAndFollowUpInterceptor的处理流程,主要工作是创建了一个streamAllocation,并将streamAllocation和request传给下一个拦截器:BridgeInterceptor进行处理,并根据网络请求中的异常或响应结果判定是否需要进行重连。所以,今天我们来分析BridgeIntercept...
2018-09-11 23:02:54
208
原创 OkHttp 源码分析(三)——RetryAndFollowUpInterceptor
一、前言在上一篇文章中,简单分析了拦截器和拦截链的调用过程,简单概括起来就是拦截器的intercept方法中,对Request进行处理,并将处理后的Request传递给下一个拦截器,获取下一个拦截器返回的Response响应后,再对Response进行处理,并返回给上一级拦截器,而Okhttp中真正的网络请求,就是在这一系列的拦截器中完成的。而Okhttp框架提供的内部拦截器是从Retr...
2018-09-05 22:35:26
266
原创 Okhttp源码分析(二)——初识拦截器
在上一篇文章中,我们简单介绍了Okhttp的同步和异步执行流程,而在同步和异步请求中,是通过getResponseWithInterceptorChain()这个方法来进行网络请求的。在上一节中提到这个方法是调用Okhttp提供的拦截器来进行真正的网络请求的,那么什么是拦截器?拦截器概念官方是这样定义的:拦截器是OkHttp中提供的一种强大机制,它可以实现网络监听、请求以及响应重写、...
2018-09-03 20:07:03
214
原创 OkHttp 源码分析(一)
一、简介OkHttp是一个优秀的网络请求框架,它是由Square公司开发的。从Android4.4版本后,Okhttp也被纳入了google源码中,目前比较流行的Retrofit框架,底层也是用OkHttp实现的,OkHttp框架的性能和重要性不言而喻。二、使用流程我们先来看看一个Okhttp的网络请求的简单流程: OkHttpClient client = new...
2018-09-02 17:25:25
274
原创 implementation、api与多模块依赖
自从gradle升级3.+版本后,gradle原来的依赖方法全部都被替换了,之前的compile替换成了implementation和api,新建工程时发现gradle默认使用的也是implementation。而最近使用多模块依赖时,发现app模块使用implementation依赖子模块时,无法直接访问子模块依赖的库,于是查了下文档: 从文档可以看出,当使用a模块implementat...
2018-08-28 21:06:43
8450
2
原创 Activity的四种启动模式
今天,我们来说一说Android的Activity的四种启动模式:standard、singleTop、singleTask和singleInstance。 在说这四种启动模式之前,我们先来介绍一下任务栈(Task)的概念。Android的任务栈是一个“后进先出”栈结构,用来管理我们APP的Activity,Android系统通过任务栈来决定哪一个Activity可以和用户交互,而只...
2018-06-07 22:40:50
200
原创 Android事件分发机制(2)——从源码角度分析
在上一篇博客中,我们以实例的形式介绍了Android的事件分发机制的三个关键函数:dispatchTouchEvent、onInterceptTouchEvent和onTouchEvent。今天,我们从源码的角度来分析Android的事件分发机制的具体实现。 在上一篇博客我们知道,Android的触屏事件首先是从Activity的dispatchTouch Event开始分发的,所以...
2018-06-05 22:31:26
157
原创 Android事件分发机制(1)——从源码角度分析
一、前言这两天在写一个自定义控件,继承了ViewGroup,需要对子View做一个事件分派的控制,之前用的onTouchEvent事件比较多,对于android的事件分发体系很早之前有了解过,很久没用就忘记了,今天在这里记录总结下。首先放上一张事件分发流程图(之前摘自网上的一篇博客,忘了哪一篇了)从上图我们可以看到事件的分发流程是从 Activity(Window)——>ViewGroup—...
2018-06-02 22:46:28
246
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人