自定义博客皮肤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)
  • 收藏
  • 关注

原创 JNI动态注册过程中要注意的坑

#JNI动态注册过程中要注意的坑还记得之前在这篇文章中进行过JNI的配置以及简单的Demo的运行,实际上在该篇文章中他的配置都是基于静态配置的。如果还有对静态配置不是很清楚的可以去看看那篇文章。同时,在这里对那篇文章中的静态配置做一个简单的补充说明:静态配置的缺点:1.需要编译所有生命了native函数的Java类,每个所生成的class文件都得用javah生成一个头文件。2.javah生...

2019-07-22 16:50:26 1499 1

原创 Android studio 3.1中在已有的项目中进行JNI开发

        相信大家对JNI并不陌生,它的主要作用就是链接java层与navtive层,虽说在我们应用等用纯java的api完全能够满足我们的项目需求,但是在有些地方我们需要进行底层优化,那么此时会写jni就很必要了,比如说视频开发的时候就需要我们手动写jni的api了。接下来我就已有的android项目中进行jni的开发做一次记录。       对于在创建项目中直接创建带jni相关的...

2018-08-04 19:22:33 3349 1

原创 深入理解Binder之ServiceManager如何成为"大管家",如何运作

上一篇中以MediaPlayerService为例讲述了Binder的一些原理,如果没有读过上篇文章的,可以先去看下上一篇的深入理解Binder原理之具体案例剖析,因为本篇虽然是重点讲ServiceManager,但是在内容上还是会用MediaPlayerService来实例讲解。 在上一篇中我们说过,在Android系统中的服务要必须先在ServiceMa...

2019-08-29 16:37:45 508 1

原创 深入理解Binder原理之具体案例剖析

前言:说起Binder相信很多开发者都了解过,但是又有多少人真正去底层了解过他呢?不过相信很多开发者也是想去深入了解他的,但是鉴于Binder的底层都是c/c++,对于纯java的开发者来说,阅读确实有一定难度。那么对于本篇文章,如果有c/c++的功底的同学可以一直跟着我的思路走下去,那么对于没有c/c++经验的同学来说,我觉得也阔以跟着我的思路来,碰到不懂的native层的代码,...

2019-08-27 11:33:31 310

原创 LiveData不一样的使用方式

在正文开始需要读者首先了解过LiveData,如果还不了解的话,请先移步到官方文档。 本篇文章主要内容: 1.LiveData原理。 2.对LiveData封装使用。LiveData原理 既然说原理,那么肯定就要先知道如何使用了,public class UserModel extends ViewM...

2019-05-24 11:18:13 1745 3

原创 LitePal与GreenDao你会选择哪一个

背景:昨天去面试的时候被面试官问了一个这样的问题。 面试官:你在app中使用了什么数据库? 我:我用的是LitePal 面试官:你为什么选择用他,而不用其他的数据库,为什么不用GreenDao? 我:对litepal比较熟,对greendao不是很熟,也不是那么了解,怕出问题不好解决。在回答完之后我就知道这个会给负印象分了...

2019-05-17 18:29:35 1421

原创 RxJava操作符源码解析(二)

       本篇文章是RxJava操作符系列的第二篇文章,我们今天来看看Map操作符与flatMap操作符。不过本篇文章是建立在前一篇基础上的,如果还没看过上一篇文章,请看RxJava操作符源码解析(一)。       我们还是从他们的使用开始理解:  Map:Observable.create(new ObservableOnSubscribe<String>() {...

2019-01-17 14:07:21 340

原创 RxJava操作符源码解析(一)

      RxJava出来也有几年了,相信大家在敲代码的时候或多或少都会用到吧。我们发现在用的时候确实很方便,很多繁琐的代码如果用RxJava来操作的话,几行就可以搞定,而且逻辑清晰,界面干净。但是有多少童鞋对他的内核了解呢。相信有很大一部分童鞋是没有看过他的源码吧。归结几大原因:     1.工作太忙,没时间。     2.里面涉及很多T,R,看不懂,也不想看。     3.懒,对...

2019-01-14 15:56:00 478

原创 一个简单的Demo带你走进组件化开发

       一直以来,插件化,组件化,模块化开发一直都是大家容易弄混淆的东西,而其中让人最不易分清的是插件化与组件化,那么首先从简单说起,模块化,他很好理解,他就像是我们平时开发的工具类一样,比如说,一个网络请求库就可以说是一个模块,这么说,相信大家就都懂了,再来说说两个最易混淆的。从规模上来说,他们一个是apk,一个是module,从通信角度看,一个是进程内通信(组件化)一个是进程间通信(插件...

2018-12-10 14:21:46 2257 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 907

原创 最短路径算法------------弗洛伊德最短路径

本篇主要是介绍弗洛伊德算法,也是当做一个笔记。先举个例子:小明在暑期想要去其他城市旅游,他想去1,2,3,4四个城市。但是现在他想知道怎样走才是最划算的,也就是怎样走路程是最短的,类似于这样的图:我们发现各个城市之间的路程都是有变化的,而且发现有的两个城市之间是没有直接回来的路的,那么这个时候就要通过其他城市进行中转了。但是不同的中转所走的路程又是不一样的,所以这个时候,如果小明会弗洛伊德算法的话

2018-01-18 15:19:22 759

原创 从源码解析computescroll()方法与invalidate()的关系

本篇文章是有关于自定义控件的,为什么我会写这篇文章呢,也是因为自己在写一个自定义轮播图的控件的时候想到一些东西,促使我想要写这篇文章。在写完轮播图之后整理下思路,将这个过程跑一遍,感觉东西还是挺多的。我想将这个理解了,对以后自己自定义view会熟悉更多吧。 这篇文章我会着重讲解computeScroll()方法跟invalidate()之间的关系。乍一看,啥关系都没有,其实底层上看,关系也并不是很

2017-06-27 15:04:59 498

原创 OkHttp源码解析(二)

今天给大家带来的是Okhttp源码解析的第二篇文章。 本篇文章的主要内容就是对异步调用的一个流程以及他的原理弄清楚。在进行异步解析之前,我们先来回顾一下第一篇文章中的同步的原理。在同步中,我们首先是对各种参数进行配置以及添加,然后组成我们的请求request,同样的,异步开始的步骤也是这样的。不同点就是异步请求在调用的时候需要在线程池中对各个线程进行管理以及资源分配。在同步中,我们知道最后异步是调

2017-05-19 10:43:30 250

原创 OkHttp源码解析(一)

大家好,这是本人的第一篇博客,内容如标题所示,关于okhttp。在上个项目中我用的网络框架就是这个。总体效果还是不错的,同时,自己也对OKhttp进行了一个封装,方便自己以后的开发,在这里,就先不把封装的代码放上来了,本片着重于Okhttp的源码。对于Okhttp的源码,我准备分几篇文章来讲解了,因为Okhttp的源码比较多也比较复杂,有些地方不是很好理解,所以要多花点时间了。希望对大家有用。

2017-05-03 18:33:59 325

空空如也

空空如也

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

TA关注的人

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