RxJava

来,带你鸟瞰 Java 中的并发框架!

北城以北 提交于 2020-04-28 20:13:15
作者:唐尤华 https://dzone.com/articles/a-birds-eye-view-on-java-concurrency-frameworks-1 1. 为什么要写这篇文章 几年前 NoSQL 开始流行的时候,像其他团队一样,我们的团队也热衷于令人兴奋的新东西,并且计划替换一个应用程序的数据库。 但是,当深入实现细节时,我们想起了一位智者曾经说过的话:“细节决定成败”。最终我们意识到 NoSQL 不是解决所有问题的银弹,而 NoSQL vs RDMS 的答案是:“视情况而定”。 类似地,去年RxJava 和 Spring Reactor 这样的并发库加入了让人充满激情的语句,如异步非阻塞方法等。为了避免再犯同样的错误,我们尝试评估诸如 ExecutorService、 RxJava、Disruptor 和 Akka 这些并发框架彼此之间的差异,以及如何确定各自框架的正确用法。 本文中用到的术语在这里有更详细的描述。 2. 分析并发框架的示例用例 3. 快速更新线程配置 在开始比较并发框架的之前,让我们快速复习一下如何配置最佳线程数以提高并行任务的性能。 这个理论适用于所有框架,并且在所有框架中使用相同的线程配置来度量性能。 对于内存任务,线程的数量大约等于具有最佳性能的内核的数量,尽管它可以根据各自处理器中的超线程特性进行一些更改。 例如,在8核机器中

仿最新BiliBili客户端(已开源)

烈酒焚心 提交于 2020-04-28 10:58:04
前言 该项目仿照B站的Android客户端进行开发,初衷是想学习流行的Android技术,但是没有数据资源。因为喜欢逛B站,而且B站的Android客户端又是Google推荐的MD设计规范,于是花了些时间研究B站的网络请求,最后成功搞定,与@Android_ZzT同学达成一致,合作开发这个模仿B站的练习项目。该项目在工作之余开发,所以更新时间不定。 前期准备 一、B站网络请求抓包 首先是对B站的网络请求进行抓包,环境是mac,开始尝试使用Charles,由于B站的网络请求大多为Https,Charles的证书设置总是不成功(没找到正确的打开方式),无法抓到Https的包,就放弃了。 这里推荐mitmproxy,是一款在github上托管的开源抓包工具。 官网地址:http://mitmproxy.org/ github地址:https://github.com/mitmproxy/mitmproxy 教程:使用mitmproxy进行移动端的HTTP抓包 Tips:Https抓包需要安装证书,大部分手机按照官方文档或是教程文章都可以成功安装,但是小米手机无法正常下载,官方文档中提到证书会放在~/.mitmproxy目录下,所以可以手动传到手机中进行安装。 在设置好证书和代理之后,我们就可以开始进行https抓包了,先打开app首页 观察mitmproxy并找到对应网络请求

来,带你鸟瞰 Java 中的并发框架!

[亡魂溺海] 提交于 2020-04-27 15:09:55
作者:唐尤华 https://dzone.com/articles/a-birds-eye-view-on-java-concurrency-frameworks-1 1. 为什么要写这篇文章 几年前 NoSQL 开始流行的时候,像其他团队一样,我们的团队也热衷于令人兴奋的新东西,并且计划替换一个应用程序的数据库。 但是,当深入实现细节时,我们想起了一位智者曾经说过的话:“细节决定成败”。最终我们意识到 NoSQL 不是解决所有问题的银弹,而 NoSQL vs RDMS 的答案是:“视情况而定”。 类似地,去年RxJava 和 Spring Reactor 这样的并发库加入了让人充满激情的语句,如异步非阻塞方法等。为了避免再犯同样的错误,我们尝试评估诸如 ExecutorService、 RxJava、Disruptor 和 Akka 这些并发框架彼此之间的差异,以及如何确定各自框架的正确用法。 本文中用到的术语在这里有更详细的描述。 2. 分析并发框架的示例用例 3. 快速更新线程配置 在开始比较并发框架的之前,让我们快速复习一下如何配置最佳线程数以提高并行任务的性能。 这个理论适用于所有框架,并且在所有框架中使用相同的线程配置来度量性能。 对于内存任务,线程的数量大约等于具有最佳性能的内核的数量,尽管它可以根据各自处理器中的超线程特性进行一些更改。 例如,在8核机器中

andorid jar/库源码解析之retrofit2

牧云@^-^@ 提交于 2020-04-27 07:45:56
目录: andorid jar/库源码解析 Retrofit2:   作用:      通过封装okhttp库,来进行web通讯,并且使用动态代理的方式,来调用接口地址,通过回调赋值结果。   栗子:   定义一个接口,用于访问使用。 public interface IServiceApi { @FormUrlEncoded @POST( "login" ) Call <LoginResult> login(@Field("name") String name, @Field("pwd" ) String pwd); @GET( "getinfo" ) Call <UserInfo> getinfo(@Query("token" ) String token); @GET( "getinfo2" ) Call <UserInfo> getinfo2(@Query("token" ) String token); }   调用接口1.可以在main中调用,因为是通过异步执行(enqueue) Retrofit retrofit = new Retrofit.Builder().addConverterFactory(GsonConverterFactory.create()).baseUrl("http://192.168.86.11:8087/" ).build();

OkHttps 三步实现 生命周期绑定

泄露秘密 提交于 2020-04-26 15:03:39
第一篇: OkHttp 优雅封装 OkHttps 之 气海雪山初探 第二篇: OkHttp 优雅封装 OkHttps 之 上传下载解密 第三篇: OkHttp 优雅封装 OkHttps 之 回调线程魔变 简介 OkHttps 是 OkHttp 的轻量封装包。和 Retrofit 相比,它更加的开箱即用,并且 API 更加自然和语义化。它用起来很优美,有点像 RxJava 却比 RxJava 更简单。 项目地址 Gitee: https://gitee.com/ejlchina-zhxu/okhttps GitHub: https://github.com/ejlchina/okhttps 起步 Maven < dependency > < groupId > com.ejlchina </ groupId > < artifactId > okhttps </ artifactId > < version > 1.0.4 </ version > </ dependency > Gradle implementation 'com.ejlchina:okhttps:1.0.4' 安卓中使用需要把 JDK 版本调成 1.8,在 app 模块的 build.gradle 中加入以下配置即可: android { // 省略其它配置.. compileOptions {

andorid jar/库源码解析

て烟熏妆下的殇ゞ 提交于 2020-04-24 12:48:26
前言   本篇作为开篇,会大体上说明,需要解读源码的,类库,或者jar。 序   原本,类库和jar的系列准备写到逆向系列课程的,但是那个东西,在写了两篇,就没有后续了,现在也不知道从哪里开始了, 只能等后期想好了,再开篇单独写吧。 目录:   EventBus、Dagger、okhttp、retrofit、butterknife、zxing、Bolts、RxJava   org.apache.commons.codec、org.apache.commons.lang、org.apache.commons.io   io.netty、io.fabric、cat.ereza、javax、msgpack、zip4j   com.davemorrissey.labs、com.daimajia.easing、com.arcsoft.livebroadcast、pl.droidsonroids.gif 厂牌库:   XXX 工具库:    来源: oschina 链接: https://my.oschina.net/u/4265622/blog/3685595

每个人都要学的图片压缩终极奥义,有效解决 Android 程序 OOM

蹲街弑〆低调 提交于 2020-04-23 08:10:40
由来 在我们编写 Android 程序的时候,几乎永远逃避不了图片压缩的难题。除了应用图标之外,我们所要显示的图片基本上只有两个来源: 来自网络下载 本地相册中加载 不管是网上下载下来的也好,还是从系统图片库中读取的图片,都有一个相同的特点:像素一帮较高。同时我们都知道, Android 系统分配给我们每个应用的内存是有限的,由于解析、加载一张图片,需要占用的内存大小,是远大于图片自身大小的。所以,这时程序就可能因为占用了过多的内存,从而出现 OOM 现象。那么什么是 OOM 呢? Exception java.lang.OutOfMemoryError: Failed to allocate a 916 byte allocation with 8388608 free bytes and 369MB until OOM; failed due to fragmentation (required continguous free 65536 bytes for a new buffer where largest contiguous free 32768 bytes) java.nio.CharBuffer.allocate (CharBuffer.java:54) java.nio.charset.CharsetDecoder.allocateMore

一款使用RxJava+Retrofit+MVP的快播App开源啦!

送分小仙女□ 提交于 2020-04-18 12:24:13
《快播》,仿网易云音乐UI,整体采用RxJava+Retrofit+MVP的架构,支持在线视频播放,在线图片浏览等功能。 用到第三方开源库: ButterKnife:依赖注入框架 glide:图片加载 retrofit:网络请求 jieCaoVideoPlayer:播放器 抓取接口用于数据展示 效果图如下: 基类: package com.zmj.qvod.base; import android.content.Context; import android.content.Intent; import android.content.pm.ActivityInfo; import android.os.Build; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.Toast; public abstract class

为何这篇RxHttp Http请求框架会如此销魂,全文干货建议收藏!

微笑、不失礼 提交于 2020-04-16 13:19:05
【推荐阅读】微服务还能火多久?>>> 前言 RxHttp相较于retrofit,功能上,两者均能实现,并无多大差异,更多的差异体现功能的使用上,也就是易用性,如对文件上传/下载/进度监听的操作上,RxHttp用及简的API,可以说碾压retrofit;另外在baseUrl、公共参数/请求头、请求加解密等功能上的易用性都要优于retrofit;然而这些,个人觉得都不算什么,个人觉得RxHttp最大的优势在于它近乎为0的上手成本、极简的API以及高扩展性,看完这篇文章,相信你会有同感。 那RxHttp就没有缺点吗?有,那就是它的稳定性目前还不如retrofit,毕竟RxHttp刚出道8个月,且全部是我一个人在维护,当然,并不是说RxHttp不稳定,RxHttp未开源前,在实际项目已经使用了近2年,接着在19年4月份将其开源,目前大大小小已迭代30多个版本,用的人也不在少数,可以说很稳定了。 2、简介 RxHttp是基于OkHttp的二次封装,并与RxJava做到无缝衔接,一条链就能发送任意请求。主要优势如下: 1. 30秒即可上手,学习成本极低 2. 完美支持 Kotlin 协程 3. 史上最优雅的处理多个BaseUrl及动态BaseUrl 4. 史上最优雅的对错误统一处理,且不打破Lambda表达式 5. 史上最优雅的实现文件上传/下载及进度的监听,且支持断点下载 6. 支持Gson