引用 implementation 'io.reactivex.rxjava2:rxandroid:2.0.2' implementation 'io.reactivex.rxjava2:rxjava:...2.1.10' Github地址 使用 延迟执行 Kotlin Observable.timer(1000, TimeUnit.MILLISECONDS) .observeOn(AndroidSchedulers.mainThread...()) .subscribe { } 多线程 常用的方式是分线程中处理数据,主线程中使用数据生成页面 Kotlin Observable .create<List<TreeItemModel
这里我们先创建了一个RequestOptions对象,然后调用它的placeholder()方法来指定占位图,再将占位图片的资源id传入到这个方法中。...这两个缓存模块的作用各不相同,内存缓存的主要作用是防止应用重复将图片数据读取到内存当中,而硬盘缓存的主要作用是防止应用重复从网络或其他地方重复下载和读取数据。...在onResourceReady()方法中,我们就可以获取到Glide加载出来的图片对象了,也就是方法参数中传过来的Drawable对象。...使用Generated API Generated API是Glide 4中全新引入的一个功能,它的工作原理是使用注解处理器 (Annotation Processor) 来生成出一个API,在Application...模块中可使用该流式API一次性调用到RequestBuilder,RequestOptions和集成库中所有的选项。
现在Android上的图片加载框架非常成熟,从最早的老牌图片加载框架UniversalImageLoader,到后来Google推出的Volley,再到后来的新兴军Glide和Picasso,当然还有Facebook...从易用性上来讲,Glide和Picasso应该都是完胜其他框架的,这两个框架都实在是太简单好用了,大多数情况下加载图片都是一行代码就能解决的,而UniversalImageLoader和Fresco则在这方面略逊一些...也就是说我们选择的范围非常广,不管是在Activity还是Fragment中调用with()方法,都可以直接传this。那如果调用的地方既不在Activity中也不在Fragment中呢?...这其实很容易理解,因为从网络上下载图片本来就是需要时间的。那么我们有没有办法再优化一下用户体验呢?当然可以,Glide提供了各种各样非常丰富的API支持,其中就包括了占位图功能。...另外,这个占位图的用法其实也演示了Glide当中绝大多数API的用法,其实就是在load()和into()方法之间串接任意想添加的功能就可以了。
开始 Glide是一款由BumpTechnologies开发的图片加载框架,使得我们可以在Android平台上以极度简单的方式加载和展示图片。...因此,我们这个系列的博客都会使用Glide 3.7.0版本来进行讲解,这个版本的Glide相当成熟和稳定。 要想使用Glide,首先需要将这个库引入到我们的项目当中。...也就是说我们选择的范围非常广,不管是在Activity还是Fragment中调用with()方法,都可以直接传this。那如果调用的地方既不在Activity中也不在Fragment中呢?...这其实很容易理解,因为从网络上下载图片本来就是需要时间的。那么我们有没有办法再优化一下用户体验呢?当然可以,Glide提供了各种各样非常丰富的API支持,其中就包括了占位图功能。...另外,这个占位图的用法其实也演示了Glide当中绝大多数API的用法,其实就是在load()和into()方法之间串接任意想添加的功能就可以了。
2、通过组件化可以更好的进行并行开发,因为我们可以为每一个模块进行单独的版本控制,甚至每一个模块的负责人可以选择自己的设计架构而不影响其他模块的开发,与此同时组件化还可以避免模块之间的交叉依赖,每一个模块的开发人员可以对自己的模块进行独立测试...1、网络请求(多任务下载和上传,采用 Retrofit+RxJava 框架) 2、图片加载(策略模式,Glide 与 Picasso 之间可以切换) 3、通信机制(RxBus) 4、基类 adapter...) 11、其他等等 组件模式和集成模式切换的实现 music组件 下的 build.gradle 文件,其他组件类似。...所以不是很推荐使用这种方法来解决资源名冲突。所以只能自己注意点,在创建资源的时候,尽量不让其重复。...例如: resourcePrefix "moudle_prefix" butterKnife使用问题 虽然 Butterknife 支持在 lib 中使用,但是条件是用 R2 代替 R ,在组件模式和集成模式的切换中
Glide 众所周知,Android在处理图片方面的系统API非常不友好。甚至在缩放图片的时候经常发生OOM。Glide是一个图片处理库,它提供了非常简洁方便的API给开发者随意的处理图片。...(imageView) Glide可以非常方便的通过url加载图片,它也提供回调方法,缓存和缩放各方面的功能。...跟其他ORM框架对比的话,Room不需要阅读复杂的文档才能明白如何使用,它没有复杂的API。这样是它的优势。...当我们在处理数据的时候,通常在切换线程和错误,还有在多个API之间调用的时候情况会变的复杂。RxJava能很好的处理这种情况。虽然RxJava不容易上手,但真的很值得花时间去学习掌握。...Android应用:@Scope和@Subcomponent总的来说,依赖注入是一种把小模块以最少努力的方式提供给其他模块使用的方式。
具体使用 关于Glide的各种使用方法,请看文章:Android图片加载库:最全面解析Glide用法 4....但其他功能将下Glide的系列文章继续分析。 Glide源码较为难懂、难分析的其中一个原因是:许多对象都是很早之前就初始化好,而并非在使用前才初始化。...Android API的调用都是必须的,这里就不多说了 // 参数2:String imageUrl:被加载图像的Url地址 // 大多情况下,一个字符串代表一个网络图片的URL // 参数3:ImageView...8看回来的:在图片请求开始前,会先使用Loading占位图代替最终的图片显示 } } 在begin()方法中有两个关注点: 关注点1:若model(第2步load()传入的图片URL地址)等于...,会先使用Loading占位图代替最终的图片显示 // 在begin()时调用(回看分析7) } ... } 所以此处显示出Glide的用法: 若传入图片的url为
具体使用 关于Glide的各种使用方法,请看文章:Android图片加载库:最全面解析Glide用法 ---- 4. 源码分析 在进行源码分析前,有几点需要特别说明: 1....但其他功能将下Glide的系列文章继续分析。 Glide源码较为难懂、难分析的其中一个原因是:许多对象都是很早之前就初始化好,而并非在使用前才初始化。...Android API的调用都是必须的,这里就不多说了 // 参数2:String imageUrl:被加载图像的Url地址 // 大多情况下,一个字符串代表一个网络图片的URL // 参数3:ImageView...8看回来的:在图片请求开始前,会先使用Loading占位图代替最终的图片显示 } } 在begin()方法中有两个关注点: 关注点1:若model(第2步load()传入的图片URL地址)等于...,会先使用Loading占位图代替最终的图片显示 // 在begin()时调用(回看分析7) } ... } 所以此处显示出Glide的用法: 若传入图片的url为
:27.0.2' 普通加载图片 Glide.with(this.getApplicationContext()) .load(url) .into(mImage); 占位图和错误时显示图片 RequestOptions...(url) .apply(options) .into(mImage); 这里就是Glide4和Glide3的最大不同,他将部分API功能封装在RequestOptions 中,在通过apply方法,传递给...()) .load("file:///android_asset/jdfw.gif") .into(mImage); 获取gif第一帧 /** * 注意:在Glide 3中的语法是先load()再asBitmap...(context,glide,registry); } } 默认缓存路径 设置缓存路径为SD卡 Glide3替换成Glide4(Generated API) 在自定义模块完成以后,就可以使用Glide...定制自己的API 定制自己的API需要借助@GlideExtension和@GlideOption这两个注解。
Rxjava提供优雅的响应式Api解决异步请求以及事件处理. RxAndroid为Android提供响应式Api....Rxlifecycle在Android上使用rxjava都知道的一个坑,就是生命周期的解除订阅,这个框架通过绑定activity和fragment的生命周期完美解决....Glide此库为本框架默认封装图片加载库,可参照着例子更改为其他的库,Api和Picasso差不多,缓存机制比Picasso复杂,速度快,适合处理大型图片流,支持 gif 图片,Fresco太大了!..."> 1.4.4 配置框架自定义属性 本框架使用和Glide相同的方式来配置自定义属性,需要在AndroidManifest中声明它,详情 中的大部分的作用为通过从Model层接口获取数据,在调用View层接口显示数据,首先实现BasePresenter,指定Model和View的范型,注意一定要指定Contract中定义的接口,Presenter
将响应传给persenter,persenter负责调用model,并将结果返回给view供其展示 MVP: MVP模式相当于在MVC模式中又加了一个Presenter用于处理模型和逻辑,将View和Model...完全独立开,在android开发中的体现就是activity仅用于显示界面和交互,activity不参与模型结构和逻辑。...api,所以应该将其封装到BaseActivity中。...Glide: 优点: 更易用,因为Glide的with方法不光接受Context,还接受Activity 和 Fragment,Context会自动的从他们获取。...总结:在项目开发中,要适当的选择图片框架,ImageLoader太老已过时,且官方不再维护,所以不再考虑使用ImageLoader;Picasso能做的,Glide都能做到,就是Glide的图片质量会稍差一些
在Android开发过程中,我们常常需要涉及大量的图片加载,图片加载框架设计,是Android高级开发工程师必备的技能,本节将通过分析Glide图片加载框架,来学习如何设计一个图片加载框架。...:name="android.permission.INTERNET" /> 基本使用 我们通过一个demo来展示Glide的使用方法,首先创建一个Android工程,在布局中添加一个ImageView...图,如果图片不是GIF格式则会按error处理 设置缓存 Glide缓存的设计是三级缓存,两级内存缓存和一级硬盘缓存,默认情况下开启了内存缓存和硬盘缓存,如果需要将内存缓存禁掉,可以使用如下代码:...进行处理,比如我们在onResourceReady方法中返回了true,那么就会不会回调到Glide的Target中的onResourceReady()方法了。...图片转换 我们可以在Glide将图片加载到ImageView显示之前进行一些操作,比如实现圆角化、圆形化、模糊化等等,Glide内置了一些转换的API RequestOptions options =
https://github.com/Bilibili/boxing 4.MinimalistWeather MinimalistWeather 是 Android 平台上一款开源天气 App ,目前还在开发中...在实际项目中的应用,MVP中RxJava生命周期的管理…; 上述罗列的各种开源框架的使用方法; Java8 Lambda表达式和Stream API的用法; 怎样适配Material Design; ToolBar...使用Material Design控件和动画 使用MVP架构整个项目,对应于model、ui、presenter三个包 使用Realm做阅读记录和收藏记录的增、删、查、改 使用Glide做图片的处理和加载...RxJava其他操作符来做延时、轮询、转化、筛选等操作 使用okhttp3对网络返回内容做缓存,还有日志、超时重连、头部消息的配置 使用Material Design控件和动画 使用MVP架构整个项目,...对应于model、ui、presenter三个包 使用Dagger2将M层注入P层,将P层注入V层,无需new,直接调用对象 使用Realm做阅读记录和收藏记录的增、删、查、改 使用Glide做图片的处理和加载
1.4 java中接口和继承的区别 1.5 线程池的好处,详解,单例(绝对好记) 线程池的好处 线程池的详解 线程池的单例 1.6 线程池的优点及其原理 使用线程池的好处 Executor框架 线程池大小确定...的优点 生命周期绑定原理 缓存原理 7.4 聊一聊关于Glide在面试中的那些事 来简单介绍下Glide的缓存 具体说一说Glide的三级缓存原理 Glide加载一个一兆的图片(100 * 100),是否会压缩后再加载...简单说一下内存泄漏的场景,如果在一个页面中使用Glide加载了一张图片,图片正在获取中,如果突然关闭页面,这个页面会造成内存泄漏吗?...运用的设计模式 7.17 Android 网络优化,使用 HTTPDNS 优化 DNS,从原理到 OkHttp 集成 DNS 和 HTTPDNS OKHttp 接入 HTTPDNS 7.18 Retrofit...框架 Android 使用RxLifecycle解决RxJava内存泄漏 解决RxJava内存泄漏(前篇):RxLifecycle详解及原理分析 RxLifecycle详细解析 使用Rxjava2导致的内存泄露问题
用Glide完成一个完整的图片加载功能请求,需要向其构造器中至少传入3个参数,分别是: with(Context context)- Context是许多Android API需要调用的, Glide...今后我们如果需要使用其他的图片加载框架,只需要继承ILoader,然后在GlobalConfig中配置即可。...总结 总结一下,其实主要思路就是在GlobalConfig中选择使用哪一个图片加载库,然后将使用者的所用设置信息保存在SingleConfig中,然后在具体的Loader中去实现,本文使用的Glide,...Glide二次封装库源码 欢迎点击star 使用 在gradle中添加如下配置 compile 'com.libin.imageloader:ImageLoader:1.0.3' 在Application...中添加如下 -dontwarn okio.** 由于具体使用文章较长,具体如何使用详细API介绍请移步本人下一篇博客 Glide二次封装库的使用 http://blog.csdn.net/github
RxBus RxBus是基于RxJava响应式编程衍生而来的一种组件间通信的模式,目前项目开发网络请求都是使用Retofit+RxJava框架搭配实现的,具体使用方法可参考我的博客:Android RxJava...会使用javaCompileOptions 这个配置来获取当前module的名字,在各个模块的build.gradle的defaultConfig属性中加入: android { defaultConfig...组件化混淆 Android Studio使用ProGuard进行混淆,它是一个压缩、优化和混淆Java字节码文件的工具,可以删除无用的类和注释,最大程度优化字节码文件。...deps.android.appcompat api deps.view.constraintlayout //glide api deps.view.glide annotationProcessor...,降低耦合,本文主要对项目中组件化常用使用场景进行总结,更多相关场景在项目开发中再进行总结。
DiskCache图片磁盘缓存,默认使用LruDiskCache算法,在缓存满时删除最近最少使用的图片 glide源码 一般看源码先看他的使用方法,通过使用的方法看对应的代码。...load(URL)Glide.with(context)已经返回了RequestManager,其实就是RequestManager.load(""),主要就是把URL传进去,获取RequestBuilder...LruCache的主要算法原理是把最近使用的对象用强引用存储在 LinkedHashMap (频繁增删、不需要排序)中,并且把最近最少使用的对象在缓存值达到预设定值之前从内存中移除。...在Android 2.3版本及以后,HttpClientHttpURLConnection则是最佳的选择,HttpURLConnection的API提供的比较简单,可以更加容易地去使用和扩展它。...httpClient 或 HttpUrlConnection的网络请求类框架,Android中是不能在主线程中(又称UI线程)进行网络操作的,那么框架中必不可少地要使用到子线程,可以使用简单的 Thread
既然要封装,那么就直接借鉴 Glide 的使用思想来进行封装好了,如果有使用过 Glide 的应该很清楚,要实现以上功能,全程一个调用链即可。...二次封装 封装要达到的目的有两点: 使用简洁、方便 其他人接入直接上手的成本尽可能少,最好不用去看文档,去看源码 第一点可以参考 Glide 的使用方式来设计,那么第二点我的想法是借助 AndroidStudio...后,界面上会弹出你可用 api,这些就是我开放给你的入口,我将这个使用过程划分成几个步骤,每个步骤能做什么,该做什么,我都给你规定好了,你参照着提示,直接从方法命名上就能够知道该如何使用了,AndroidStudio...DFresco第二步.png 当调用了 source() 后就进入了第二个步骤,这个步骤中,我将图片相关的配置设计到另外一个步骤中去,否则连同图片配置的 api 也都在这里的话,会搞得蛮乱的,可能让使用者到这里后不清楚该调用哪些接口了...这样封装的目的在于,你可以通过一条调用链的形式就设置完所有的配置,就像 Glide 的使用一样,而不用再去 new 很多 Fresco 的类,再去拼接。
3 注解(V4新特性)和自定义方法 Glide使用了annotation processor来生成API,允许应用修改RequestBuilder、RequestOptions和任意的包含在单一流式API...这样做的目的是: 对于library项目来讲可以使用自定义方法继承Glide的API ; 对于应用来讲,在继承Glide的API后,可以通过添加自定义方法。...但是其实完全可以在layout文件中设置ImageView为android:scaleType="centerCrop",Glide会自动根据这个属性设置图片的显示方式。...清楚内存缓存,在主线程调用: ? 在使用的时候,可以跳过内存缓存: ?...super Bitmap> transition)方法中可以通过bitmap获取图片的尺寸。 ? 使用: ? 方法二 使用override() ?
编者的话:simsun在2013年从手Q转岗到微信,在此非常感谢他对微信做出的贡献。在我看来,sim是一个活生生的全栈工程师,从硬件、后台到iOS、Android样样精通。...十分类似,已经在最新的迭代中开始使用data-binding来实现MVVM,具体可以参考一个第三方例子(https://github.com/ivacf/archi)。...如何优雅的偷懒 REST Client 关于REST API是一件几乎纯体力活,这里应当使用代码生成工具来帮助我们完成繁琐的工作。...微信在git实践上因为大量使用并行开发,存在多个并行的release分支。...开源和分布式开发的思想也在团队内部兴起,微信内使用的开发工具、组件、流程也陆续诞生了一批内部开源项目。从内到外,相信在不远的未来,大家就可以在github上看到它们。