安卓
扬帆起航123
这个作者很懒,什么都没留下…
展开
-
OkHttp源码解析(二)
今天给大家带来的是Okhttp源码解析的第二篇文章。 本篇文章的主要内容就是对异步调用的一个流程以及他的原理弄清楚。在进行异步解析之前,我们先来回顾一下第一篇文章中的同步的原理。在同步中,我们首先是对各种参数进行配置以及添加,然后组成我们的请求request,同样的,异步开始的步骤也是这样的。不同点就是异步请求在调用的时候需要在线程池中对各个线程进行管理以及资源分配。在同步中,我们知道最后异步是调原创 2017-05-19 10:43:30 · 264 阅读 · 0 评论 -
深入理解Binder原理之具体案例剖析
前言:说起Binder相信很多开发者都了解过,但是又有多少人真正去底层了解过他呢?不过相信很多开发者也是想去深入了解他的,但是鉴于Binder的底层都是c/c++,对于纯java的开发者来说,阅读确实有一定难度。那么对于本篇文章,如果有c/c++的功底的同学可以一直跟着我的思路走下去,那么对于没有c/c++经验的同学来说,我觉得也阔以跟着我的思路来,碰到不懂的native层的代码,...原创 2019-08-27 11:33:31 · 366 阅读 · 0 评论 -
JNI动态注册过程中要注意的坑
#JNI动态注册过程中要注意的坑还记得之前在这篇文章中进行过JNI的配置以及简单的Demo的运行,实际上在该篇文章中他的配置都是基于静态配置的。如果还有对静态配置不是很清楚的可以去看看那篇文章。同时,在这里对那篇文章中的静态配置做一个简单的补充说明:静态配置的缺点:1.需要编译所有生命了native函数的Java类,每个所生成的class文件都得用javah生成一个头文件。2.javah生...原创 2019-07-22 16:50:26 · 1542 阅读 · 1 评论 -
LiveData不一样的使用方式
在正文开始需要读者首先了解过LiveData,如果还不了解的话,请先移步到官方文档。 本篇文章主要内容: 1.LiveData原理。 2.对LiveData封装使用。LiveData原理 既然说原理,那么肯定就要先知道如何使用了,public class UserModel extends ViewM...原创 2019-05-24 11:18:13 · 1776 阅读 · 3 评论 -
LitePal与GreenDao你会选择哪一个
背景:昨天去面试的时候被面试官问了一个这样的问题。 面试官:你在app中使用了什么数据库? 我:我用的是LitePal 面试官:你为什么选择用他,而不用其他的数据库,为什么不用GreenDao? 我:对litepal比较熟,对greendao不是很熟,也不是那么了解,怕出问题不好解决。在回答完之后我就知道这个会给负印象分了...原创 2019-05-17 18:29:35 · 1502 阅读 · 0 评论 -
RxJava操作符源码解析(一)
RxJava出来也有几年了,相信大家在敲代码的时候或多或少都会用到吧。我们发现在用的时候确实很方便,很多繁琐的代码如果用RxJava来操作的话,几行就可以搞定,而且逻辑清晰,界面干净。但是有多少童鞋对他的内核了解呢。相信有很大一部分童鞋是没有看过他的源码吧。归结几大原因: 1.工作太忙,没时间。 2.里面涉及很多T,R,看不懂,也不想看。 3.懒,对...原创 2019-01-14 15:56:00 · 504 阅读 · 0 评论 -
RxJava操作符源码解析(二)
本篇文章是RxJava操作符系列的第二篇文章,我们今天来看看Map操作符与flatMap操作符。不过本篇文章是建立在前一篇基础上的,如果还没看过上一篇文章,请看RxJava操作符源码解析(一)。 我们还是从他们的使用开始理解: Map:Observable.create(new ObservableOnSubscribe<String>() {...原创 2019-01-17 14:07:21 · 363 阅读 · 0 评论 -
一个简单的Demo带你走进组件化开发
一直以来,插件化,组件化,模块化开发一直都是大家容易弄混淆的东西,而其中让人最不易分清的是插件化与组件化,那么首先从简单说起,模块化,他很好理解,他就像是我们平时开发的工具类一样,比如说,一个网络请求库就可以说是一个模块,这么说,相信大家就都懂了,再来说说两个最易混淆的。从规模上来说,他们一个是apk,一个是module,从通信角度看,一个是进程内通信(组件化)一个是进程间通信(插件...原创 2018-12-10 14:21:46 · 2277 阅读 · 1 评论 -
Replugin在项目中的配置
Replugin的背景就不介绍了,感兴趣的可以去这里看看。首先是在项目的根目录的build.gradle中添加宿主依赖:classpath 'com.qihoo360.replugin:replugin-host-gradle:2.2.4'然后在宿主App的build.gradle中添加配置:apply plugin: 'replugin-host-gradle'/** * 配置项均为可选配...原创 2018-03-16 16:58:03 · 924 阅读 · 0 评论 -
从源码解析computescroll()方法与invalidate()的关系
本篇文章是有关于自定义控件的,为什么我会写这篇文章呢,也是因为自己在写一个自定义轮播图的控件的时候想到一些东西,促使我想要写这篇文章。在写完轮播图之后整理下思路,将这个过程跑一遍,感觉东西还是挺多的。我想将这个理解了,对以后自己自定义view会熟悉更多吧。 这篇文章我会着重讲解computeScroll()方法跟invalidate()之间的关系。乍一看,啥关系都没有,其实底层上看,关系也并不是很原创 2017-06-27 15:04:59 · 534 阅读 · 0 评论 -
深入理解Binder之ServiceManager如何成为"大管家",如何运作
上一篇中以MediaPlayerService为例讲述了Binder的一些原理,如果没有读过上篇文章的,可以先去看下上一篇的深入理解Binder原理之具体案例剖析,因为本篇虽然是重点讲ServiceManager,但是在内容上还是会用MediaPlayerService来实例讲解。 在上一篇中我们说过,在Android系统中的服务要必须先在ServiceMa...原创 2019-08-29 16:37:45 · 533 阅读 · 1 评论