RxJava

带你封装自己的MVP+Retrofit+RxJava2框架(一)

守給你的承諾、 提交于 2021-02-11 20:44:22
前言 文本已经收录到我的Github个人博客,欢迎大佬们光临寒舍: 我的GIthub博客 看完本篇文章的,可以看下 带你封装自己的MVP+Retrofit+RxJava2框架(二) ,里面封装得到了改进 本篇文章需要已经具备的知识: MVP 的概念和基本使用 Retrofit 框架的基本使用 RxJava2 框架的基本使用 ButterKnife 框架的基本使用 Base 基类的概念 学习清单: Activity 和 Fragment 基类的封装 MVP 的封装使用 一.为什么要封装这套框架呢? 在搞清楚这个问题之前,我们回顾一下基本概念 RxJava : ReactiveX 在 JVM 上的一个实现, ReactiveX 使用 Observable 序列组合异步和基于事件的程序;掌握了它,你可以优美地处理异步任务和事件的回调 Retrofit :一个 RESTful 的 HTTP 网络请求框架的封装,网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责 网络请求接口的封装:掌握了它,你能优美地进行网络请求。 MVP :一种解耦模型和视图的模式,是现在很多公司的主流模式。 由此可见,在平时的开发中熟练运用这种模式,不仅可以满足生活中大部分应用程序的场景,还可以为将来的工作积攒宝贵的实战经验。 二.核心用法 本项目基于 Android X 进行构建

祝大家节日快乐!

本秂侑毒 提交于 2021-02-02 07:23:18
嗨,nanchen 的小伙伴们,好久不见。 上次国庆节给大家说节日快乐的时候,居然出现了严重的掉粉情况,实在是尴尬。甚至还有不少人说南尘又偷懒了,好吧我又偷懒了,而且是被迫偷懒。 今天是属于大家的节日,就简单给大家发个红包。不要求大家一定要点赞,也不需要大家评论,更不需要转载朋友圈帮我分享导流。 就很普通的一个小红包啦,只有 100 个,大家就进支付宝输入口令: 南尘1024 即可。 请不要告诉其他人,我只希望我的小粉丝们领取,后来的就没有洛。 南尘最近腰酸背疼,需求吃紧,利用了仅仅有的放松时间给大家发福利,就不说什么了。文章后面肯定会更的。 哎,凑字数了! 祝大家 1024 程序员节快乐!!!祝大家 1024 程序员节快乐!!!祝大家 1024 程序员节快乐!!!祝大家 1024 程序员节快乐!!!祝大家 1024 程序员节快乐!!!祝大家 1024 程序员节快乐!!!祝大家 1024 程序员节快乐!!!祝大家 1024 程序员节快乐!!!祝大家 1024 程序员节快乐!!!祝大家 1024 程序员节快乐!!!祝大家 1024 程序员节快乐!!!祝大家 1024 程序员节快乐!!!祝大家 1024 程序员节快乐!!!祝大家 1024 程序员节快乐!!!祝大家 1024 程序员节快乐!!!祝大家 1024 程序员节快乐!!!祝大家 1024 程序员节快乐!!!祝大家 1024

Android面试题

女生的网名这么多〃 提交于 2021-01-17 03:45:06
Android面试题[百度,小米,美团] 类加载器 双亲委托机制 自己定义java.lang.String, 在其他地方调用String类,调用的是系统的还是自定义的 同一个类用两个类加载器加载是否一样 类加载器的分类 类加载器在插件化中的应用 Handler Message 一个线程有几个Handler,如果一个线程有多个Handler,那么怎么系统怎么确定某个Message所回调到的handleMessage方法 两个副线程可以使用Looper.prepare公用一个MessageQueue吗?如果可以怎么实现 HandlerThread的用法 多线程 volatile关键词 lReentrantLock synchronized(同步代码快,同步函数,同步变量有什么区别) 有使用过什么多线程类? (回答任意一个都会追究到源码级,例如说AsyncTask,会问AsyncTask的线程池,并行和串行实现以及BlockingQueue的源码) A,B两线程同时启动,A执行到某一段必须等待B执行完才能接着执行,怎么实现?(消费者生产者模式) 设计模式 书写一个线程安全的单例模式(纯手写) 列举几个源码中你觉得用的比较好的设计模式并举例(AlertDialog Builder) 算法(书写代码) 自己实现String的equals方法 字符串反转算法 十二个球

面世宣言:给 Android 开发者的面试手册

徘徊边缘 提交于 2020-12-23 14:10:25
这个系列不是最好的了? 对,再也不敢说「 这可能是最好的 XXX」了。虽然我的 RxJava 2.0 系列 获得了较好的反馈,甚至还有人说「能望见传世神文 《给 Android 开发者的 RxJava 详解》 的脚步」,那都不重要了。 而且知道我的人也知晓,我不是扎根互联网的老程序员,对面试也是知之甚少,所以我不敢说这是「最好」的。 虽然这个系列已经不是「最好」的了,但我依然会花很多时间去完善他,感谢好友「兰柳学」的强势赞助。 为什么要写这个系列? 装逼从来都不是必要的,必要的是我们始终如一的想着装逼。 咳咳,讲点现实的,是因为今天面试被虐了。 一直以来我以为自己还算是个不错的 Android 开发工程师,GitHub 好像有较为欢迎的假象。还有一大批诸如 RxJava、Dagger2、Retrofit 在内的框架文章可以装装逼,但实际上大多数企业,尤其是互联网公司,根本就不会看重你娴熟运用框架的能力。 面试最后收到一句话:「 我们非常肯定你的开源分享能力和学习能力,我们也相信你能做好开发,但你的基础确实是太 low 了!」 其实从我的回答来说,我自己也觉得非常 low,用「舍本逐末」四个字来形容我再合适不过。 划重点!!! 为了防止一些类似我这样的 Android 开发工程师「严重偏科」,我决定出这么一个系列,我不知道这个系列多久可以出完,也许明天,也许三年

RxJava2的错误处理方案

不打扰是莪最后的温柔 提交于 2020-12-19 14:30:54
最近使用retrofit2 + rxKotlin2写接口访问,想尽量平铺代码,于是就想到当借口返回的状态码为「不成功」时(比如:code != 200),就连同网络错误一起,统一在onError方法中处理。想法总是好的,但是实际中却遇到onError无法捕获异常,造成应用崩溃的问题,终于在这个周末,我梳理清楚了RxJava的错误处理机制。 每一个后端接口基本都会有一个自定义的返回码,我们常常依据返回码来判断接口是否访问成功,是否成功返回我们想要的数据,当初作为一只菜鸟,我是这样来写的: fun login(account: String, pwd: String) { showProgress("登陆中")//展示菊花 service.login(account,pwd) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe({ if (it.code == 20000 && it.data != null) { //登陆成功! //跳转到主页 } else { //登陆失败! //弹出提示 //dismissProgress()关闭菊花 } }, { dismissProgress() //登陆失败! //弹出提示 //dismissProgress()关闭菊花 })

Android通用框架设计与完整电商App开发

北慕城南 提交于 2020-12-12 01:41:02
Android通用框架设计与完整电商App开发 下载地址:百度云盘 本课程面向Android工程师的进阶课程 想提高项目框架设计能力 想更好地实现业务功能实现能力 想同时提高项目框架与业务实现的双重能力 学前必备技术 有Android项目基础,有精益求精的精神,不只满足于功能实现 章节目录: 第1章 课程介绍及APP效果展示(Java版) 本章概述了本课程大家能学到什么,老师如何讲解,为什么这么讲解,并介绍了框架的整体架构设计与模块分解,最后展示了用自己设计的框架开发出来的完整电商APP的效果图 1。四位数字字母验证码的生成实例 1 import random 2 if __name__ == " __main__ " : # 四位数字字母验证码的生成 3 checkcode= "" # 保存验证码的变量 4 for i in range(4 ): 5 index=random.randrange(0,4) # 生成一个0~3中的数 6 if index!=i and index +1 != i: 7 checkcode +=chr(random.randint(97,122)) # 生成a~z中的一个小写字母 8 elif index +1== i: 9 checkcode +=chr(random.randint(65,90) ) # 生成A~Z中的一个大写字母 10 else

妈妈再也不用担心你不会使用线程池了

你。 提交于 2020-12-04 13:54:02
为什么要用线程池 使用线程池管理线程有如下优点: 降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 提高响应速度:当任务到达时,任务可以不需要等到线程创建就能立即执行。 提高线程的可管理性:线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。 线程池介绍 ThreadPoolExecutor Java 为我们提供了 ThreadPoolExecutor 来创建一个线程池,其完整构造函数如下所示: int corePoolSize(核心线程数):线程池新建线程的时候,如果当前线程总数小于corePoolSize,则新建的是核心线程,如果超过corePoolSize,则新建的是非核心线程;核心线程默认情况下会一直存活在线程池中,即使这个核心线程啥也不干(闲置状态);如果设置了 allowCoreThreadTimeOut 为 true,那么核心线程如果不干活(闲置状态)的话,超过一定时间(时长下面参数决定),就会被销毁掉。 int maximumPoolSize(线程池能容纳的最大线程数量):线程总数 = 核心线程数 + 非核心线程数。 long keepAliveTime(非核心线程空闲存活时长):非核心线程空闲时长超过该时长将会被回收,主要应用在缓存线程池中,当设置了

Retrofit安装使用

喜欢而已 提交于 2020-12-01 21:14:18
1、Retrofit入门介绍 Retrofit作为现在最流行的联网框架,公司项目中基本全部使用的它,当然网上有很多详细的教程讲解retrofit的使用,我只是结合自己在项目中的使用情况做一下记录,以便自己日后使用。 1.1 项目安装 compile 'io.reactivex:rxjava:1.1.0' compile 'io.reactivex:rxandroid:1.1.0' compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4' compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4' compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4' 1.2 官方教程链接 http://square.github.io/retrofit/ 1.3 使用 1. 创建Retrofit实例时需要通过Retrofit.Builder,并调用baseUrl方法设置URL。 Retrofit retrofit = new Retrofit .Builder () .baseUrl ( "http://localhost:4567/" ) .build () ; 2、定义的service返回值为Call的情况 2.1、

根治可扩展、高可用、高性能“神器”:SpringCloud+Nginx高并发编程手册

∥☆過路亽.° 提交于 2020-12-01 14:54:34
在面试过程中几乎是必问到高并发一些问题,而本篇就是SpringCloud结合Nginx解答高并发开发、大厂面试的核心难题!本篇旨在帮助开发工程师弥补在Spring Cloud微服务、Nginx反向代理核心知识方面的短板! 统筹全篇 这份手册前6章剖析Feign高并发RPC的底层原理,解析Hystrix高性能配置的核心选项,阐述Hystrix滑动窗口的核心原理。后4章介绍Nginx的核心原理及其配置,并结合秒杀场景实现Spring Cloud秒杀、Spring Cloud+Nginx Lua秒杀,为广大Java开发者提供一个全面学习高并发开发的实战案例。 同时这份笔记也是免费分享的,免费获取方式在文末! 第1章Spring Cloud+Nginx高并发核心编程的学习准备 第2章Spring Cloud入门实战 第3章Spring Cloud RPC远程调用核心原理 第4章RxJava响应式编程框架 第5章Hystrix RPC保护的原理 第6章微服务网关与用户身份识别 第7章Nginx/OpenResty详解 第8章Nginx Lua编程 第9章限流原理与实战 第10章Spring Cloud +Nginx秒杀实战 总结 这份手册可以说是SpringCloud+Nginx高并发编程实战中一份弥足珍贵的笔记,无论是在日常开发之中开始面试前的准备,都是值得大家去阅读理解!

RxJava安装及简单示例

放肆的年华 提交于 2020-11-24 16:01:39
一、在Android Studio中添加RxJava2 1、在build.Gradle添加: compile ‘io.reactivex.rxjava2:rxandroid:2.0.1’ compile ‘io.reactivex.rxjava2:rxjava:2.1.2’ 2、点synet, 3、添加完成。 二、简单使用RxJava2 1、设定一个场景。 有一个快餐店(kuaicandian)。 我(wo)订了(subscribe)一份快餐,并留下了地址。 等待送餐到家。 2、写代码。 //创建一个快餐店。Observable(被观察者) Observable<String> kuaicandian=Observable.create( new ObservableOnSubscribe<String>() { @Override public void subscribe (ObservableEmitter<String> e) throws Exception { Thread.sleep( 6000 ); e.onNext( "快餐(牛肉面)" ); //发送数据 e.onComplete(); //关闭发送数据,以后不能再使用e.onNext } }); //创建一个我(wo)。Observer(观察者) Observer<String> wo= new