欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談Android輕量級的數(shù)據(jù)緩存框架RxCache

 更新時間:2017年08月26日 10:09:10   作者:i_love_lu  
本篇文章主要介紹了淺談Android輕量級的數(shù)據(jù)緩存框架RxCache,具有一定的參考價值,感興趣的小伙伴們可以參考一下

請求網絡數(shù)據(jù)是在安卓開發(fā)中使用最頻繁的一個功能,網絡請求的體驗決定了用戶對整個APP的感覺,因此合理地使用緩存對網絡請求的數(shù)據(jù)進行處理極為重要。合理的進行緩存和網絡請求,可以為APP帶來更優(yōu)秀的體驗。圖片的緩存有Picasso、Glide、Fresco等非常著名的框架,它們極為成熟并且使用廣泛,程序員應該做的是使用輪子而非重復造輪子。但對于網絡數(shù)據(jù)的緩存,大多都是自用自封裝,每個人都需要進行繁瑣的編碼工作。RxCache就對網絡緩存進行了封裝,并采用RxJava模式,可以與其他RxJava的代碼無縫對接,使用極為方便。

RxCache使用LruCache和DiskLruCache對網絡請求數(shù)據(jù)進行二級緩存,主要適配于接口API返回數(shù)據(jù),不用于圖片等的緩存??梢栽O置緩存模式、緩存大小,設置數(shù)據(jù)過期時間,并提供了根據(jù)key刪除緩存和清空所有緩存的功能。提供了Gson方式和Serialize方式進行數(shù)據(jù)存儲轉換與還原。

項目GitHub地址

RxCache

開始使用:

首先在項目的Gradle中添加依賴:

RxCache使用JitPack進行依賴管理,所以需要先在項目的build.gradle中添加以下代碼:

allprojects{
  repositories{
    ...
    maven{url 'https://jitpack.io'}
  }
}

然后在Module的gradle中添加以下依賴:

compile 'com.github.LtLei:RxCache:v1.0.0'

在你的Application中進行初始化:

RxCache.init(this);//為RxCache提供Context

也可以使用Builder進行高級初始化:

new RxCache.Builder()
  .setDebug(true)  //開啟debug,開啟后會打印緩存相關日志,默認為true
  .setConverter(new GsonConverter()) //設置轉換方式,默認為Gson轉換
  .setCacheMode(CacheMode.BOTH)  //設置緩存模式,默認為二級緩存
  .setMemoryCacheSizeByMB(50)  //設置內存緩存的大小,單位是MB
  .setDiskCacheSizeByMB(100)  //設置磁盤緩存的大小,單位是MB
  .setDiskDirName("RxCache")  //設置磁盤緩存的文件夾名稱
  .build();

寫入緩存

RxCache.getInstance()
  .put("test", "This is data to cache.", 10 * 1000)  //key:緩存的key data:具體的數(shù)據(jù) time:緩存的有效時間
  .compose(RxUtil.<Boolean>io_main()) //線程調度
  .subscribe(new Consumer<Boolean>() {
    @Override
    public void accept(Boolean aBoolean) throws Exception {
      if (aBoolean) Log.d("Cache", "cache successful!");
    }
  },new Consumer<Throwable>() {
    @Override
    public void accept(Throwable throwable) throws Exception {
      throwable.printStackTrace();
    }
  });

讀取緩存

讀取緩存時,分為以下幾種情況:

若為Gson轉換時:

讀取基本類型數(shù)據(jù),或自定義的javabean數(shù)據(jù),或數(shù)組數(shù)據(jù)等一切可以獲取.class的數(shù)據(jù)

RxCache.getInstance()
  .get("test",false,String.class)  //key:緩存的key update:表示從緩存獲取數(shù)據(jù)強行返回NULL
  .compose(RxUtil.<CacheResponse<String>>io_main())
  .subscribe(new Consumer<CacheResponse<String>>() {
    @Override
    public void accept(CacheResponse<String> stringCacheResponse) throws Exception {
      if(stringCacheResponse.getData()!=null)
        Log.d("data from cache : "+stringCacheResponse.getData());
    }
  },new Consumer<Throwable>() {
    @Override
    public void accept(Throwable throwable) throws Exception {
      throwable.printStackTrace();
    }
  });

讀取List等無法獲取.class的數(shù)據(jù),以上基本數(shù)據(jù)也可以使用此方式

Type type = new TypeToken<List<String>>(){}.getType();
RxCache.getInstance()
  .<List<String>>get("test",false,type)  //由于Type不是類,需要指定泛型
  .compose(RxUtil.<CacheResponse<List<String>>>io_main())
  .subscribe(new Consumer<CacheResponse<List<String>>>() {
    @Override
    public void accept(CacheResponse<List<String>> listCacheResponse) throws Exception {
      if(listCacheResponse.getData()!=null)
        Log.d("data from cache : "+listCacheResponse.getData().toString());
    }
  },new Consumer<Throwable>() {
    @Override
    public void accept(Throwable throwable) throws Exception {
      throwable.printStackTrace();
    }
  });

若為Serialize方式時,則統(tǒng)一使用以下方法即可:

RxCache.getInstance()
  .<List<String>>get("test",false)  //指定泛型,不再需要傳.class或Type
  .compose(RxUtil.<CacheResponse<List<String>>>io_main())
  .subscribe(new Consumer<CacheResponse<List<String>>>() {
    @Override
    public void accept(CacheResponse<List<String>> listCacheResponse) throws Exception {
      if(listCacheResponse.getData()!=null)
        Log.d("data from cache : "+listCacheResponse.getData().toString());
    }
  },new Consumer<Throwable>() {
    @Override
    public void accept(Throwable throwable) throws Exception {
      throwable.printStackTrace();
    }
  });

清除指定緩存

RxCache.getInstance()
  .remove("testList")
  .compose(RxUtil.<Boolean>io_main())
  .subscribe(new Consumer<Boolean>() {
    @Override
    public void accept(Boolean aBoolean) throws Exception {
      if (aBoolean) Log.d("cache data has been deleted.");
    }
  }, new Consumer<Throwable>() {
    @Override
    public void accept(Throwable throwable) throws Exception {
      throwable.printStackTrace();
    }
  });

清除全部緩存

RxCache.getInstance()
  .clear()
  .compose(RxUtil.<Boolean>io_main())
  .subscribe(new Consumer<Boolean>() {
    @Override
    public void accept(Boolean aBoolean) throws Exception {
      if (aBoolean) Log.d("All datas has been deleted.");
    }
  }, new Consumer<Throwable>() {
    @Override
    public void accept(Throwable throwable) throws Exception {
      throwable.printStackTrace();
    }
  });

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Android多媒體應用使用MediaPlayer播放音頻

    Android多媒體應用使用MediaPlayer播放音頻

    這篇文章主要為大家詳細介紹了Android多媒體應用使用MediaPlayer播放音頻,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 關于Android Fragment對回退棧的詳細理解

    關于Android Fragment對回退棧的詳細理解

    這篇文章主要介紹了Android  Fragment的回退棧示例詳細介紹的相關資料,在Android中Fragment回退棧是由Activity管理的,每個Activity都有自己的回退棧,其中保存了已經停止(處于后臺)的Fragment實例,需要的朋友可以參考下
    2016-12-12
  • Flutter開發(fā)技巧ListView去除水波紋方法示例

    Flutter開發(fā)技巧ListView去除水波紋方法示例

    這篇文章主要為大家介紹了Flutter開發(fā)技巧ListView去除水波紋方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • Android ScrollView的頂部下拉和底部上拉回彈效果

    Android ScrollView的頂部下拉和底部上拉回彈效果

    本篇文章主要介紹了Android ScrollView的頂部下拉和底部上拉回彈效果,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Android 自定義陰影效果詳解及實例

    Android 自定義陰影效果詳解及實例

    這篇文章主要介紹了Android 自定義陰影效果詳解及實例的相關資料,需要的朋友可以參考下
    2017-02-02
  • autojs模仿QQ長按彈窗菜單實現(xiàn)示例詳解二

    autojs模仿QQ長按彈窗菜單實現(xiàn)示例詳解二

    這篇文章主要為大家介紹了autojs模仿QQ長按彈窗菜單實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • Android控件RadioButton的使用方法

    Android控件RadioButton的使用方法

    這篇文章主要為大家詳細介紹了Android控件RadioButton的使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • Android MarkTipsView文字標識控件使用方法

    Android MarkTipsView文字標識控件使用方法

    這篇文章主要為大家詳細介紹了Android MarkTipsView文字標識控件的使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Android BroadcastReceiver廣播注冊方式總結

    Android BroadcastReceiver廣播注冊方式總結

    這篇文章主要介紹了Android BroadcastReceiver廣播注冊方式總結的相關資料,需要的朋友可以參考下
    2017-01-01
  • Android Binder的原理與使用

    Android Binder的原理與使用

    這篇文章主要介紹了Android Binder的原理與使用,幫助大家更好的理解和學習使用Android開發(fā),感興趣的朋友可以了解下
    2021-04-04

最新評論