![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android
文章平均质量分 70
_StriveG
要么牛B,要么淘汰。
展开
-
Android消息传递机制浅析
1.Looper、Handler、MessageQueue的关系Looper 用于线程的消息循环,一个线程只能有一个Looper对象Handler 执行任务调度和发生一些操作(在未来某时刻)执行其他线程中的队列消息MessageQueue 消息队列 一个Looper对应一个MessageQueue,并不断从MessageQueue中取出消息,提交给Handel处理。2.Looper以主原创 2016-05-03 20:31:26 · 2843 阅读 · 0 评论 -
OkHttp源码解析(一)——整体流程(上)
1、前言这里的整体流程指的是从执行到响应的整体过程。在看过些许源码之后,我被这个框架迷住了。2、从普通的get请求入手一般来说,最简单的get请求是下面这种方式。 Request request = new Request.Builder() .url("https://www.baidu.com/") .build();原创 2016-07-09 19:03:24 · 2999 阅读 · 0 评论 -
OkHttp源码解析(五)——cache缓存
1.从HttpEngine#sendReques说起在这个代码当中,有下面这一段代码。InternalCache responseCache = Internal.instance.internalCache(client);额,上面的代码还是调用OkHttpCLient的静态代码块中的internalCache方法。 @Override public InternalCache inte原创 2016-07-30 00:45:44 · 2160 阅读 · 1 评论 -
OkHttp源码解析(四)——失败重连
1.前言OKHttp内部是做了失败从连的操作的,那么我就来简单看下失败重连的相关逻辑。2.RealCall#getResponse 说起因为是失败从连,所以我们要看cacth相关部分的代码,代码如下: HttpEngine retryEngine = engine.recover(e, false, null); if (retryEngine != null) {原创 2016-07-28 23:51:12 · 5682 阅读 · 0 评论 -
Android基础-Android中的HashMap浅析
以下源码基于Java 1.80.HashMap中的关键变量MINIMUN_CAPACITY = 4 (最小容量)MAXIMUN_CAPACITY = 1 << 30 ; (最大容量)private static final Entry[] EMPTY_TABLE= new HashMapEntry[MINIMUM_CAPACITY >>> 1]; 这里的这个就是hash表,是一种数组链表结构(原创 2016-08-22 00:00:23 · 6452 阅读 · 0 评论 -
Java并发基础(九)-Fork/Join框架
1. 什么是Fork/Join框架Java 1.7 中提供了Fork/Join框架,实现了work-stealing算法(工作窃取算法),什么意思呢?就是说,我可以把当前任务分割成多个小任务,让空闲的线程也进行工作,是不是很赞,这样,就能最大限度的利用资源,从而提升效率。哈,这里就补全线程池基础那篇文章了,java 1.8 提供的newWorkStealingPool,就是用这个实现的。2. 包括哪原创 2016-10-08 22:42:17 · 1290 阅读 · 0 评论 -
Android网络开源库-Retrofit(六)源码浅析-上
Retrofit配置RxJava真的很好用。 希望亲们看的时候,自己也看下代码,这样效果最好了。1. 初始化过程一般来说,我们通过Builder去初始化Retrofit。我们看看支持我们配置那些呢。如下图: platform 平台信息(java,android,ios)callFactory 进行实际请求的(一般为okhttpclient)baseUrl baseUrlconvertFac原创 2016-10-10 23:53:02 · 2370 阅读 · 0 评论 -
Android DeepLink框架-DeepLinkDispatch源码浅析
1. 前言-什么叫DeepLinkDeepLink,该网址可能需翻墙。最常见的应用就是在网页中跳转到App的某个页面,电商类应用可是都用了的。用法如下:来自文档 我们通过如下代码获取data信息。 Intent intent = getIntent(); String action = intent.getAction(); Uri data = intent.getData();额,这里就不原创 2016-10-12 22:32:48 · 6651 阅读 · 3 评论 -
走进设计模式(四)-行为型模式(下)
命令模式备忘录模式状态模式访问者模式中介者模式解释器模式0. 命令模式 将一个请求封装成一个对象,从而让用户使用不同的请求把客户端参数化,对请求排队或者记录请求日志,以及支持可撤销的奥做。Receiver 接受者角色 Command 命令类抽象接口 ConcreateCommand 具体命令角色 Invoker 请求者角色 Client 客户端public class Re原创 2016-10-24 22:11:13 · 574 阅读 · 0 评论 -
了解EventBus 3.0 (一)-订阅流程
虽然我在这里写下Eventbus,但是,还是觉得老司机教你 “飙” EventBus 3 才是很完美的文章。1. 前言EventBus是平常开发中很常用的框架,用了简直爱不释手。在这里,以Eventbus3.0 为例,来了解一下。首先了解点简单的用法。gradle文件中引入compile 'org.greenrobot:eventbus:3.0.0'注册与解注//注册EventBus.g原创 2016-10-15 18:13:13 · 2152 阅读 · 0 评论 -
Toast源码浅析
1.Toast的用法Toast.makeText(this, "Toast", Toast.LENGTH_SHORT).show();2.makeText入手 public static Toast makeText(Context context, CharSequence text, @Duration int duration) { Toast result = ne原创 2016-07-29 14:15:32 · 1804 阅读 · 0 评论 -
OkHttp源码解析(三)——连接池复用
1.StreamAllocation#newStream这个方法是在连接是返回stream对象的。我们看这个方法里的这段代码。 RealConnection resultConnection = findHealthyConnection(connectTimeout, readTimeout, writeTimeout, connectionRetryEnabled,原创 2016-07-28 23:18:22 · 3160 阅读 · 0 评论 -
OkHttp源码解析(二)——整体流程(下)
1.前言这一篇将说一下请求体的写入以及相应的读取过程。2.请求体写入过程HttpEngine#readResponse这个方法下有下面的一块代码片段。else if (!callerWritesRequestBody) { networkResponse = new NetworkInterceptorChain(0, networkRequest, streamAl原创 2016-07-28 00:03:29 · 1477 阅读 · 0 评论 -
Android Studio发布到Jcenter
1.前言拥抱开源,热爱开源,将我们认为不错的代码开源到gihtub,将我们的库发布到jcenter\mevan等。2.准备工作2.1 准备申请仓库账号做一个其签名文件 .jks2.2 插件引入在根目录的gradle文件下加入classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.2' classpath 'com.原创 2016-03-28 01:17:41 · 1794 阅读 · 1 评论 -
Android性能优化-缓存的使用
1.前言前面也几篇博客提到了缓存,但是比较零散,最近又对数据缓存有了新的认识,所以来记录下我对缓存的理解,以及我在项目中是如何使用的。2.为什么需要数据缓存以下为我个人看法。考虑极端环境下的用户体验 断网情况网速慢的情况节省客户端流量减少服务器压力 3.什么样的数据需要缓存首先最需要缓存的就是图片了(这个不多说)其次就是一些非常重要的数据(如app首页数据)4.常见的数据缓存方法以原创 2016-03-31 23:16:57 · 3654 阅读 · 0 评论 -
Android网络开源库-Retrofit(二) 文件上传、下载及进度监听
1.写在前面的话首先说明,我还没太搞懂retrofit,目前,这篇博客只能给出这几个内容。文件上传文件下载文件下载的进度监听还有这三点没弄好,多文件一次上传 文件上传进度监听当前使用版本compile 'com.squareup.retrofit2:retrofit:2.0.2'2. 文件上传2.1 api 接口编写public interface uploadfileApi {原创 2016-04-21 21:03:05 · 32990 阅读 · 12 评论 -
Android 网络开源库-Retrofit(一)简单介绍
前言当前的网络开源库有许多,如volley,okhttp,retrofit等,这三个库当前是比较火的,其中,okhttp和retrofit由square团队开发。关于这三个库的区别,请移步stackoverflow或者知乎查看。开发过程中选择什么样的开源库需要更具我们APP来做出选择。我们选出stackoverflow中的一段话来看下。 上面说,需要与web service通信的时候,我原创 2015-11-30 21:44:02 · 10624 阅读 · 10 评论 -
Android网络开源库-Retrofit(三) 批量上传及上传进度监听
由于gif图太大的原因,我将图放在了github,如果博客中显示不出来图,传送门由于我是事先写在md上的,导致代码的可读性差,大家将就着看吧。1. 前言在上一篇博客中,我们介绍了Retrofit的文件上传,文件下载以及进度监听,这篇博客我们来了解下批量上传以及上传进度的监听。2.批量上传要想实现批量上传,我们要考虑下HTML中实现批量上传的方法,借助Form表单,所以,我们也可以通过借助Form原创 2016-04-23 18:32:24 · 13619 阅读 · 8 评论 -
SnackBar源码解析-了解它的工作原理
Android Material Design中添加了许多东西,以前只是用一下(自己做demo玩,并没有用在实际项目中)。接下来的一系列文章,要给大家分析源码了,不知道你们高不高兴,开不开心,满不满足。1.前言Snackbar是一个控件,在屏幕底部快速弹出控件,与Toast不同的是,Snackbar支持相应用户操作。那么接下来就从源码的角度来告诉大家它的工作原理,方便大家更好的使用。 这篇博客涉及原创 2016-06-11 16:18:03 · 2063 阅读 · 0 评论 -
ubuntu 14.04下 下载Android源码
废话不多说,直接上方法。0.说明源代码托管地址 https://android.googlesource.com/可能需要翻墙(我没翻,有的同学说得翻,你们自己看吧)1. 下载repo下载地址,点击下载地址,直接保存到本地。2.将repo移动到~bin/ 下终端里移动 sudo mv repo ~bin/3.在一个足够大的位置创建一个文件4.repo initrepo init -u htt原创 2016-06-11 16:33:21 · 2141 阅读 · 0 评论 -
Android Studio中引入layoutlibjar的正确姿势
这里就是小小的记录一下 地址:https://www.zhihu.com/question/31811664原创 2016-06-11 19:02:42 · 5102 阅读 · 0 评论 -
SharedPreferences源码浅析
0、6.0网盘地址https://yunpan.cn/cBV9PmkBEPdcd (提取码:61a8) 我已经将Android 6.0 的源代码压缩上传到了360网盘,有需要的同学请自取。1、 前言一般来说,我们有两种方法获取SharedPreferences对象(下文称为sp)。Activit#getSharedPreferences Context#getSharedPreferences原创 2016-07-03 16:19:06 · 1649 阅读 · 0 评论 -
学习Android Architecture Blueprints(四)-databinding分支
1. 前言上一篇博客中,简单的学习了下databinding的用法,我自己也是爱上了他。咱们今天继续学习Android Architecture Blueprints。2. 架构图我们能够看到,在vp和model之间,多了viewmodel这一层,这一层就是用们的databinding来实现的。从图上来看,是mvpvm的形式。有兴趣的同学可以看下大帅的这片文章。链接地址3. 如何使用从架构图上的关系原创 2016-11-06 14:20:20 · 870 阅读 · 0 评论 -
学习Android Architecture Blueprints(一)-mvp分支
1. 前言在几个月前,google sample组织下,创建了一个叫做android-architecture的仓库,第一时间引爆了Android圈,这个项目在于指导使用不同的架构指导我们如何解决测试、维护以及扩展的难题,让我们一一学习下。项目地址2. todo-mvp分支在去年的时候,mvp火了起来,然而,在国内的文章当中,大多是的试讲m-v-p分开来写,我今年毕设使用这种模式,发现一个很严重的问原创 2016-10-25 23:17:54 · 2025 阅读 · 0 评论 -
了解EventBus 3.0 (二)-发送事件
虽然我在这里写下Eventbus,但是,还是觉得老司机教你 “飙” EventBus 3 才是很完美的文章。1. 我们能发送哪些事件post发送普通事件postSticky 发送粘性事件粘性事件,当有订阅者订阅的时候,会从粘性事件列表中取出最后(最新)的事件,发送出去。2. EventBus#postcurrentPostingThreadState是ThreadLocalPosting原创 2016-10-15 21:42:35 · 2332 阅读 · 0 评论 -
Java并发基础(七)-原子类和并发集合类
灌水文1. 原子类 java.util.concurrent.atomic包下面提供了许多原子类,这些类是通过CAS实现的。关于CAS,大家可以google,详细学习下。图中Atomic开头的是 jdk1.5开始提供的原子类。而其他则是在jdk1.8中新增加的。Atomic开头的类中,大多都用了Unsafe类。这个类提供了硬件级别的原子操作。1.8中增加的都是Striped64的子类,St原创 2016-10-07 16:20:49 · 1531 阅读 · 0 评论 -
Java并发基础(八)-locks包
1. 前言Java锁的种类 java中的锁种类是真的多。而locks包下也有一些。包结构如下: AbstractOwnableSynchronizer 一个线程拥有的同步器,这个类提供了创建锁和相关同步器的基础AbstractQueuedLongSynchronizer 所有的同步状态都是用long变量来维护的,而不是int,在需要64位的属性来表示状态的时候会很有用AbstractQueu原创 2016-10-07 23:07:26 · 1663 阅读 · 0 评论 -
走进设计模式(二)-结构型模式
1.前言结构型模式有以下几种。适配器模式装饰模式代理模式外观模式桥接模式组合模式享元模式下面一一学习。2. 适配器模式 适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。结构如下:Target 目标角色Adaptee 需要适配的接口Adapter 适配器举个例子,我们手机充电器接口 就充当这这一角色。原创 2016-10-20 21:39:51 · 582 阅读 · 0 评论 -
两点技巧-给TextView添加Tag,点击空白收起键盘
1. 前言这篇给大家带来两个开发中用到的东西,地址如下:全局点击空白收起键盘TextView 带标签希望大家star一下。2. 点击空白收起键盘大家有没有被测试提这种bug,我要点击空白收起键盘!!!其实很简单,代码如下。 private static void setTouchListener(final Activity context){ context.getWi原创 2016-10-23 13:37:18 · 3131 阅读 · 0 评论 -
Android JNI学习笔记(三)-编译文件Android.mk、Application.mk 与camke
1. 前言在android2.2中,加入了cmake编译,而以前都是用Android.mk、Application.mk的,今天就来记录下,他们的配置选项。2. Android.mkAndroid.mk在jni目录下,用于描述构建系统的源文件以及 shared libraries 。文件格式如下:以LOCAL_PATH变量开始 LOCAL_PATH := $(call my-dir)紧接着是C原创 2016-11-28 17:28:51 · 13926 阅读 · 5 评论 -
Android DataBinding 学习笔记
学习自Google文档以及大帅的博客,文末地址链接。1. DataBinding自从Google加入了DataBing,还是很受开发者喜爱的,所以,咱也来学习下DataBinding是什么鬼东西。在gradle文件的android节点下。添加如下配置,就开启了DataBinding。 dataBinding { enabled = true }下面有几点说明:下文所原创 2016-11-01 00:04:43 · 2310 阅读 · 0 评论 -
说说Realm在Android上的坑
1.前言新项目使用了大名鼎鼎的realm,在网络上看到大量安利realm的文章,但是在使用的过程中却遇到了很多问题,这里记录下两个多月以来遇见的问题。希望大家能够理性选择,不要人云亦云。当然,,realm文档中也给出了一些当前的限制,但是,我们今天要说的,不仅仅是这些。realm-java文档地址2.线程的限制通常来讲,我们查询数据库会开一个子线程查询,这次,我们也没例外,简简单单的写两行代码,如下原创 2016-11-13 13:03:50 · 14145 阅读 · 5 评论 -
Android JNI学习笔记(四)-数据类型映射以及native调用java
1. 前言前几篇学习了jni开发的基本流程、动态注册native函数以及相关编译文件的编写,咱们也算是知道了jni开发,但是还不够,今天咱们来学习下,java和jni的数据类型映射(说白了就是对应关系),以及如何在jni层调用java层的一些东西。偷偷告诉你们,这些全在jni.h文件里。2. 数据类型映射首先是我们的基本数据类型,其关系如下表描述这样。上面关系的相关代码在jni.h的44-51行,如原创 2016-11-30 00:03:18 · 5355 阅读 · 0 评论 -
Android JNI学习笔记(五)-这两篇,足够了解jni
我学jni就是通过两篇文档来学的,我相信通过仔细阅读这两篇,绝对可以了解jni。Android jni tips JNIToc 官方文档我会乱说?剩下的就是c&c++的学习,以及其他方面了。原创 2016-12-03 10:07:58 · 902 阅读 · 1 评论 -
Java并发基础(六)-Exchanger和Semaphore
1. Exchanger Exchanger提供了 一个同步点 , 在这个同步点,两个线程可以交换数据,每个线程通过exchange()方法的入口提供数据给另外的线程,并接收其它线程提供的数据,并返回。看个简单的例子: public static void main(String[] args){ final Exchanger exchanger = new Excha原创 2016-10-07 15:28:14 · 946 阅读 · 0 评论 -
Java并发基础(五)-CountDownLatch、CyclocBarrier、Phaser的使用
1. CountDownLatch 一个同步工具,允许一个或多个线程去等待其他线程中执行的一系列操作完成。什么意思呢?就是说,允许这个线程阻塞,直到,其他线程的所有操作都完成之后,在继续执行。举个例子。 public static void main(String[] args) throws InterruptedException { final CountDownL原创 2016-10-07 14:19:37 · 1067 阅读 · 3 评论 -
Java并发基础(四)-volatile和synchronized
0. 内存可见性Java中,所有的变量都是存在主存中,这对所有的线程都是共享的,而且每个线程都有自己的工作内存。当线程与其他线程共享一个变量时,便会把主内存的变量复制到线程内存中去。当发生对变量的修改时,会同步到主内存,主内存再同步到其他线程内存中去。可见性,指的是线程之间的可见性,一个线程的修改状态对另一个线程也是可见的。1. volatile volatile 修饰的成员变量在每次被线程访问原创 2016-10-06 11:08:50 · 474 阅读 · 0 评论 -
学习Android Architecture Blueprints(二)-rxjava 和 loader 分支
1. 前言今天咱们继续,看下todo-mvp-rxjava分支与todo-mvp-loaders分支。rxjava分支引入了很火的rxjava。loaders分支引入了3.0就加入进来的Loader框架。2. rxjava分支不知道大家有没有用rxjava,rxjava用起来真的很不错,尤其是用rxandroid做线程调度的时候,配合上RxAndroid 全家桶,真的爽翻了。RxJava Esse原创 2016-10-26 21:58:48 · 1597 阅读 · 0 评论 -
Android WebView的两点技巧-资源拦截与js注入
1.前言WebView是个很常用的控件,但是缺不是那么简单,那么,今天来给大家介绍下最近在做的时候,遇见的几个问题。注意,并不是所有的情况下,webview加载的都是自适应的网页。比如说,加载<p></p><img></img> 。2.资源拦截问题 问题描述 网页的某些资源在手机上不合适,比如说css资源过于庞大,客户端加载太慢,比如说,你的这个css放在客户端不合适,等等。那么,我们怎么解原创 2016-10-02 23:21:03 · 5488 阅读 · 0 评论 -
Android网络开源库-Retrofit(四)文件相关
以前写过一些retrofit的相关文章,当时只是自己学习研究的,最近项目,加入了retrofit,因此遇到了一些问题,需要记录一下。1.前言在以前,写过retrofit上传文件相关,但是,需求总是变化的。前面的,介绍了上传进度的监听,但是,那时候是监听单文件进度。虽然能满足我们大多数需求,但是,需求总是变化的。我们现在需要监听统一的进度。2.尝试用Retrofit来现在,我们改变以前的的做法,现在以原创 2016-10-03 17:57:13 · 1367 阅读 · 0 评论