Rxjava自定义图片缓存缓存框架(一)
来源:互联网 发布:成都软件开发工资 编辑:程序博客网 时间:2024/06/11 11:07
2016年最Android最火的技术应该就是Rxjava技术了,使用Rxjava做图片缓存,学习跟上潮流。
图片缓存框架UML图
我们常用的图片缓存框架:picasso,fresco,glide等等,本质上还是上面的流程图,只是功能和优化上各有不同。请求加载图片,检查内存中是否有缓存,有就添加到视图中去,没有查看本地文件当中的是否有需要的文件,如果有显示到视图,没有请求网络图片,下载到本地文件,缓存到内存,显示都视图当中。从上到下,那个步骤最先就先使用那个。
添加依赖:
compile 'io.reactivex:rxandroid:1.2.1'
compile 'com.jakewharton.rxbinding:rxbinding:0.4.0'
compile 'io.reactivex:rxjava:1.1.6'
布局代码:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.luoxiang_z.rxjavaretrofit.MainActivity"> <Button android:id="@+id/button" android:text="Button" android:layout_width="match_parent" android:layout_height="wrap_content" /></RelativeLayout>
java代码:
package com.01dajiang.rxjavaretrofit;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.text.TextUtils;import android.util.Log;import android.widget.Button;import com.jakewharton.rxbinding.view.RxView;import rx.Observable;import rx.Subscriber;import rx.functions.Action1;import rx.functions.Func1;public class MainActivity extends AppCompatActivity { public static final String TAG = "MainActivity"; private Button mButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mButton = (Button) findViewById(R.id.button); final Observable<String> memoryObservable = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onCompleted(); subscriber.onNext(null);//模拟内存中没有数据 } }); final Observable<String> diskObservable = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onCompleted(); subscriber.onNext(null);//模拟本地文件没有数据 } }); final Observable<String> netWorkObservable = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onCompleted(); subscriber.onNext("netWork");//模拟网络上有数据 } }); RxView.clicks(mButton).subscribe(new Action1<Void>() { @Override public void call(Void aVoid) { Observable.concat(memoryObservable, diskObservable, netWorkObservable) .first(new Func1<String, Boolean>() { @Override public Boolean call(String s) { return !TextUtils.isEmpty(s);//返回第一个非空的数据,就近原则取数据 } }) .subscribe(new Action1<String>() { @Override public void call(String s) { Log.d("Example_Uesed", "get data from:"+s); } }) ; } }); }}
上面都是在模拟请求图片加载,模拟了内存和本地没有数据,网络有数。
后台log打印网络有数据:D/Example_Uesed: get data from:netWork
0 0
- Rxjava自定义图片缓存缓存框架(一)
- Android四大图片缓存框架之-Fresco(一)
- 自定义缓存图片
- picasso图片缓存框架
- 图片缓存框架
- Glide图片缓存框架
- 图片缓存框架Glide
- 图片缓存框架
- Andoroid图片缓存框架
- 图片缓存--Fresco(一)
- android图片缓存实现(自定义ImageLoader)
- 图片缓存:ImageCache和ImageSdCache(一)
- Android LruCache图片缓存使用(一)
- 图片三级缓存详细整理(一)
- 网络编程(自定义缓存图片)
- 淘宝UWP--自定义图片缓存
- 手写图片缓存框架 ImageLoader
- Android图片缓存框架-Glide
- 外观模式
- 如何写出漂亮的有可读性的微信文案?
- C++实现反射机制
- 怎样在asp中产生10个0-99的随机数
- log4j2 入门学习与总结
- Rxjava自定义图片缓存缓存框架(一)
- 队列的实现(数组方式)
- 【Dongle】【Windows】cmd命令提示符(二)
- 网上粘贴一段代码后程序出现错误:error C3872: "0xa0": 此字符不允许在标识符中使用
- Gradle学习笔记(一)环境搭建
- 快速排序代码实现
- iOS开发-IJKplayer第三方集成(视频直播)
- DTU
- FCC参阅笔记之有趣的算法(下)