上一篇文章Android进阶:四.RxJava2 源码解析 1里我们讲到Rxjava2 从创建一个事件到事件被观察的过程原理,这篇文章我们讲Rxjava2中链式调用的原理.本文不讲用法,仍然需要读者熟悉Rxjava基本的用法. 一.Rxjava2 的基本用法 Rxjava是解决异步问题的,它的链式调用让代码看起来非常流畅优雅.现在我们带上线程切换以及链式调用来看看.下面代码是示例: Observable .create(new ObservableOnSubscribe<String>() {…
概述 承接上一篇RxJava2 源码解析(一),本系列我们的目的: 知道源头(Observable)是如何将数据发送出去的.    知道终点(Observer)是如何接收到数据的.    何时将源头和终点关联起来的    知道线程调度是怎么实现的    知道操作符是怎么实现的 本篇计划讲解一下4,5. RxJava最强大的莫过于它的线程调度 和 花式操作符.map操作符 map是一个高频的操作符,我们首先拿他开刀.例子如下,源头Observable发送的是String类型的数字,利用map转换成…
title: RxJava2源码解析(二) categories: 源码解析 tags: 源码解析 rxJava2 前言 本篇主要解析RxJava的线程切换的原理实现 subscribeOn 首先, 我们先看下subscribeOn()方法, 老样子, 先上Demo Observable<Integer> observable = Observable .create(new ObservableOnSubscribe<Integer>() { @Override public v…
本文适合使用过Rxjava2或者了解Rxjava2的基本用法的同学阅读 一.Rxjava是什么 Rxjava在GitHub 主页上的自我介绍是 "a library for composing asynchronous and event-based programs using observable sequences for the Java VM"(一个在 Java VM 上使用可观测的序列来组成异步的.基于事件的程序的库). 通俗来说,Rxjava是一个采用了观察者模式设计处理…
Handler的主要用途有两个:(1).在将来的某个时刻执行消息或一个runnable,(2)把消息发送到消息队列. 主要依靠post(Runnable).postAtTime(Runnable, long).postDelayed(Runnable, long).sendEmptyMessage(int).sendMessage(Message).sendMessageAtTime(Message).sendMessageDelayed(Message, long)这些方法来来完成消息调度.p…
为什么读源码 很多人一定和我一样的感受:源码在工作中有用吗?用处大吗?很长一段时间内我也有这样的疑问,认为哪些有事没事扯源码的人就是在装,只是为了提高他们的逼格而已. 那为什么我还要读源码呢?一刚开始为了面试,后来为了解决工作中的问题,再后来就是个人喜好了.说的好听点是有匠人精神:说的委婉点是好奇(底层是怎么实现的):说的不自信点是对黑盒的东西我用的没底,怕用错:说的简单直白点是提升自我价值,为了更高的薪资待遇(这里对真正的技术迷说声抱歉). 源码中我们可以学到很多东西,学习别人高效的代码书写.…
前言 上一篇文章中讲到了otto的用法,这一篇我们来讲一下otto的源码.可能有人觉得otto过时了,但是通过源码我们学习的是高手设计otto时的设计理念,这种设计理念是不过时的. otto各个类的作用 首先先来看一下otto的源码的各个类的作用,如下图所示. 如图所示,otto的源码并不多,主要的类的功能如下: Produce.Subscribe:发布者和订阅者注解类. Bus:事件总线类,用来注册和取消注册,维护发布-订阅模型,并处理事件调度分发. HandlerFinder.Annotat…
概述 最近事情太多了,现在公司内部的变动,自己岗位的变化,以及最近决定找工作.所以博客耽误了,准备面试中,打算看一看RxJava2的源码,遂有了这篇文章. 不会对RxJava2的源码逐字逐句的阅读,只寻找关键处,我们平时接触得到的那些代码.背压实际中接触较少,故只分析了Observable.分析的源码版本为:2.0.1 我们的目的: 知道源头(Observable)是如何将数据发送出去的.    知道终点(Observer)是如何接收到数据的.    何时将源头和终点关联起来的    知道线程调…
一.什么是AAPT2 在Android开发过程中,我们通过Gradle命令,启动一个构建任务,最终会生成构建产物"APK"文件.常规APK的构建流程如下: (引用自Google官方文档) 编译所有的资源文件,生成资源表和R文件: 编译Java文件并把class文件打包为dex文件: 打包资源和dex文件,生成未签名的APK文件: 签名APK生成正式包. 老版本的Android默认使用AAPT编译器进行资源编译,从Android Studio 3.0开始,AS默认开启了 AAPT2 作为…
一.前言 在学习Service的时候,我们一定会知道IntentService:官方文档不止一次强调,Service本身是运行在主线程中的(详见:[Android]Service),而主线程中是不适合进行耗时任务的,因而官方文档叮嘱我们一定要在Service中另开线程进行耗时任务处理.IntentService正是为这个目的而诞生的一个优雅设计,让程序员不用再管理线程的开启和允许. 至于介绍HandlerThread,一方面是因为IntentService的实现中使用到了HandlerThrea…