移動架構37 Glide架構簡述

2021-08-14 01:54:47 字數 3078 閱讀 3112

在fragment或activity中,載入,glide能夠自動實現取消、暫停、恢復,如何實現的呢?

glide.with 將當前顯示的頁面物件傳入glide

supportrequestmanagerfragment 空的fragment 監聽當前頁面的生命週期

activityfragmentlifecycle 觀察者模式,fragment的生命週期交給了他

glide生命週期

時序圖:

將當前顯示的頁面物件傳入glide

supportrequestmanagerfragment 空的fragment 監聽當前頁面的生命週期

activityfragmentlifecycle 觀察者模式,fragment的生命週期交給了他

1)drawablerequestbuilder:

@override

public target into(imageview view)

=>genericrequestbuilder

->into(glide.buildimageviewtarget(view, transcodeclass))

… request previous = target.getrequest();

if(previous != null)

//建立請求 request是乙個介面,請求的實現類:genericrequest

request request = this.buildrequest(target);

//開始執行請求

this.requesttracker.runrequest(request);

=》requesttracker:runrequest

request.begin();//請求開始

=》genericrequest

begin()

:onsizeready(overridewidth, overrideheight);

onsizeready()

//datafetcher相當於載入的乙個loader介面(包括網路、file型別的 )

final datafetcher datafetcher = modelloader.getresourcefetcher(model, width, height);

//datafetcher介面中有乙個loaddata方法,用來載入

//返回的子型別 是根據第乙個引數 model 來確定

this.loadstatus = this.engine.load(this.signature, width, height, datafetcher, this.loadprovider, this.transformation, transcoder, this.priority, this.ismemorycacheable, this.diskcachestrategy, this);

把請求丟給影象處理引擎處理

2) engine.load://判斷記憶體是否快取了這張

engineresource cached = this.loadfromcache(key, ismemorycacheable);

… //enginejob負責載入每乙個請求,它裡面有執行緒池成員變數

enginejob enginejob = enginejobfactory.build(key, ismemorycacheable);

… enginerunnable runnable = new enginerunnable(enginejob, decodejob, priority);

//enginerunnable 實現runable介面,具體執行請求邏輯 run(),功能:請求資源,處理資源,快取資源

… enginejob.start(runnable);

enginejob.start():

//enginejob有乙個專門處理執行緒的類:executorservice

=》enginerunnable的run方法:

解析,返回glide裡面的resource物件

resource = this.decode();

=》decodefromsource()

decodejob.decodefromsource();

public resource decodefromsource() throws exception

decodesource():

object data = this.fetcher.loaddata(this.priority);

通重載入器 實現載入 他是執行子執行緒 run方法被呼叫

載入網路時 data是inputstream型別

datafetcher的實現類: httpurlfetcher

loaddata =》loaddatawithredirects:

… urlconnection.setconnecttimeout(2500);

urlconnection.setreadtimeout(2500);

… 解析urlconnectiong返回的inputstream流物件

4)回到decodejob的decodesource方法中去:

=》decodefromsourcedata(data)

… decoded = loadprovider.getsourcedecoder().decode(data, width, height);

//getsourcedecoder返回的是streambitmapdecoder

總結,glide的載入流程如下:

多層架構簡述

使用多層架構進行系統開發是現今系統設計的流行趨勢。通過分解業務細節,將不同的功能 分散開來,更利於系統的設計和開發,同時為可能的變更提供了更小的單元。以下就是乙個典型的多層體系結構圖。首先我們以 訂單 order 為例,進行乙個簡單的業務分解。1.訂單自然包括訂單的內容 orderinfo 其中有諸...

多層架構簡述

分類 多層架構 2007 06 20 14 47 2247人閱讀收藏 舉報 資料庫ioc 架構設計 儲存session作業 使用多層架構進行系統開發是現今系統設計的流行趨勢。通過分解業務細節,將不同的功能 分散開來,更利於系統的設計和開發,同時為可能的變更提供了更小的單元。以下就是乙個典型的多層體系...

Openstack 架構簡述

概述 本文章相關的靈感 說明 來自於 首先放幾張圖,詳細的解釋了openstack的架構以及網路拓撲結構.架構 拓撲openstack架構詳解 整個openstack由控制節點,計算節點,網路節點,儲存節點四大部分組成 以下架構僅為本人理解,不盡完全,如有錯誤歡迎指出 控制節點架構 控制節點包括以下...