請求網(wǎng)絡(luò)數(shù)據(jù)是在安卓開發(fā)中使用最頻繁的一個功能,網(wǎng)絡(luò)請求的體驗決定了用戶對整個APP的感覺,因此合理地使用緩存對網(wǎng)絡(luò)請求的數(shù)據(jù)進(jìn)行處理極為重要。合理的進(jìn)行緩存和網(wǎng)絡(luò)請求,可以為APP帶來更優(yōu)秀的體驗。圖片的緩存有Picasso、Glide、Fresco等非常著名的框架,它們極為成熟并且使用廣泛,程序員應(yīng)該做的是使用輪子而非重復(fù)造輪子。但對于網(wǎng)絡(luò)數(shù)據(jù)的緩存,大多都是自用自封裝,每個人都需要進(jìn)行繁瑣的編碼工作。RxCache就對網(wǎng)絡(luò)緩存進(jìn)行了封裝,并采用RxJava模式,可以與其他RxJava的代碼無縫對接,使用極為方便。
成都創(chuàng)新互聯(lián)長期為1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為龍文企業(yè)提供專業(yè)的成都網(wǎng)站建設(shè)、成都網(wǎng)站制作,龍文網(wǎng)站改版等技術(shù)服務(wù)。擁有十年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
RxCache使用LruCache和DiskLruCache對網(wǎng)絡(luò)請求數(shù)據(jù)進(jìn)行二級緩存,主要適配于接口API返回數(shù)據(jù),不用于圖片等的緩存??梢栽O(shè)置緩存模式、緩存大小,設(shè)置數(shù)據(jù)過期時間,并提供了根據(jù)key刪除緩存和清空所有緩存的功能。提供了Gson方式和Serialize方式進(jìn)行數(shù)據(jù)存儲轉(zhuǎn)換與還原。
項目GitHub地址
RxCache
開始使用:
首先在項目的Gradle中添加依賴:
RxCache使用JitPack進(jìn)行依賴管理,所以需要先在項目的build.gradle中添加以下代碼:
allprojects{ repositories{ ... maven{url 'https://jitpack.io'} } }
然后在Module的gradle中添加以下依賴:
compile 'com.github.LtLei:RxCache:v1.0.0'
在你的Application中進(jìn)行初始化:
RxCache.init(this);//為RxCache提供Context
也可以使用Builder進(jìn)行高級初始化:
new RxCache.Builder() .setDebug(true) //開啟debug,開啟后會打印緩存相關(guān)日志,默認(rèn)為true .setConverter(new GsonConverter()) //設(shè)置轉(zhuǎn)換方式,默認(rèn)為Gson轉(zhuǎn)換 .setCacheMode(CacheMode.BOTH) //設(shè)置緩存模式,默認(rèn)為二級緩存 .setMemoryCacheSizeByMB(50) //設(shè)置內(nèi)存緩存的大小,單位是MB .setDiskCacheSizeByMB(100) //設(shè)置磁盤緩存的大小,單位是MB .setDiskDirName("RxCache") //設(shè)置磁盤緩存的文件夾名稱 .build();
寫入緩存
RxCache.getInstance() .put("test", "This is data to cache.", 10 * 1000) //key:緩存的key data:具體的數(shù)據(jù) time:緩存的有效時間 .compose(RxUtil.<Boolean>io_main()) //線程調(diào)度 .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轉(zhuǎn)換時:
讀取基本類型數(shù)據(jù),或自定義的javabean數(shù)據(jù),或數(shù)組數(shù)據(jù)等一切可以獲取.class的數(shù)據(jù)
RxCache.getInstance() .get("test",false,String.class) //key:緩存的key update:表示從緩存獲取數(shù)據(jù)強(qiáng)行返回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(); } });
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
新聞標(biāo)題:淺談Android輕量級的數(shù)據(jù)緩存框架RxCache
當(dāng)前路徑:http://jinyejixie.com/article28/poesjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、搜索引擎優(yōu)化、外貿(mào)網(wǎng)站建設(shè)、手機(jī)網(wǎng)站建設(shè)、ChatGPT、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)