真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

優(yōu)秀的開源框架學(xué)習(xí)

ButterKnife基本使用 http://www.cnblogs.com/mengdd/archive/2015/06/23/4595973.html 

創(chuàng)新互聯(lián)公司長期為成百上千家客戶提供的網(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)站制作、外貿(mào)網(wǎng)站建設(shè),武寧網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

Android SlidingMenu 使用詳解

http://blog.csdn.net/lmj623565791/article/details/36677279

ImageLoader的源碼分析:

這個庫封裝的層次實在是太多了?。?!可以借鑒作者是怎么封裝類的?。?!


DisplayImageOptions  Builder     配置一些參數(shù)

ImageLoaderEngine             引擎類

ProcessAndDisplayImageTask        

ImageLoadingInfo              存儲一些下載相關(guān)的信息

。。。 

從ImageLoader.getInstance().displayImage這個方法追溯,這個方法可以選傳url,p_w_picpath,也可以傳

入?yún)?shù)和進(jìn)度監(jiān)聽者。

1)ImageLoader的實例化采用單例設(shè)計模式

2)ImageLoader的初始化init方法會初始化引擎ImageLoaderEngine,并傳入DisplayImageOptions參數(shù)

  》ImageLoaderEngine封裝了一些線程池的操作

  》這個類里還用到FlushedInputStream這個類,F(xiàn)lushedInputStream會避免個別的錯誤Issue 6066:  BitmapFactory.decodeStream() fails if InputStream.skip() does not skip fully  

  》類中用同步Map來存儲ImageView的緩存key值。 

  》submit會將任務(wù)提交到線程池

3)判斷uri為不為null,為null會將參數(shù)DisplayImageOptions中的默認(rèn)圖片設(shè)置給ImageView。

  同時會回調(diào)監(jiān)聽者的一些方法

 從參數(shù)DisplayImageOptions中得到最大的圖片尺寸

  根據(jù)url和圖片的最大尺寸來生成緩存的key

 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

 大致的思路:

 》在Application里init  

   初始化參數(shù)DisplayImageOptions并傳遞給ImageLoaderEngine類。

   ImageLoaderEngine主要是維護(hù)了一些線程池,對Runnable任務(wù)進(jìn)行管理。

   任務(wù)主要是通過Handler來實現(xiàn)線程間的通訊。

 》在display里解析DisplayImageOptions封裝的參數(shù)信息 

  

 》判斷對url==null作處理 

 

 》獲取key

 String memoryCacheKey = MemoryCacheUtils.generateKey(uri, targetSize);

  ++DisplayImageOptions.Builder在初始化build()的時候,如果用戶沒有設(shè)置某些參數(shù),它會自動

  進(jìn)行一些默認(rèn)設(shè)置,通過DefaultConfigurationFactory這個類。

public ImageLoaderConfiguration build() {
			initEmptyFieldsWithDefaultValues();
			return new ImageLoaderConfiguration(this);
}

  ++initEmptyFieldsWithDefaultValues方法進(jìn)行的一些主要的初始化操作:

 如diskCache、memoryCache、downloader等,很好地體現(xiàn)了面向?qū)ο蟮木幊趟枷搿?/p>

private void initEmptyFieldsWithDefaultValues() {
			if (taskExecutor == null) {
				taskExecutor = DefaultConfigurationFactory
						.createExecutor(threadPoolSize, threadPriority, tasksProcessingType);
			} else {
				customExecutor = true;
			}
			if (taskExecutorForCachedImages == null) {
				taskExecutorForCachedImages = DefaultConfigurationFactory
						.createExecutor(threadPoolSize, threadPriority, tasksProcessingType);
			} else {
				customExecutorForCachedImages = true;
			}
			if (diskCache == null) {
				if (diskCacheFileNameGenerator == null) {
					diskCacheFileNameGenerator = DefaultConfigurationFactory.createFileNameGenerator();
				}
				diskCache = DefaultConfigurationFactory
						.createDiskCache(context, diskCacheFileNameGenerator, diskCacheSize, diskCacheFileCount);
			}
			if (memoryCache == null) {
				memoryCache = DefaultConfigurationFactory.createMemoryCache(context, memoryCacheSize);
			}
			if (denyCacheImageMultipleSizesInMemory) {
				memoryCache = new FuzzyKeyMemoryCache(memoryCache, MemoryCacheUtils.createFuzzyKeyComparator());
			}
			if (downloader == null) {
				downloader = DefaultConfigurationFactory.createImageDownloader(context);
			}
			if (decoder == null) {
				decoder = DefaultConfigurationFactory.createImageDecoder(writeLogs);
			}
			if (defaultDisplayImageOptions == null) {
				defaultDisplayImageOptions = DisplayImageOptions.createSimple();
			}
		}
	}

 

 》根據(jù)key從緩存中獲取Bitmap

 Bitmap bmp = configuration.memoryCache.get(memoryCacheKey);

  判斷緩存中有沒有得到Bitmap

   

  LoadAndDisplayImageTask,從網(wǎng)絡(luò)上下載圖片位于tryLoadBitmap()這個方法當(dāng)中

  通過BaseImageDecoder這個類的decode方法下載網(wǎng)絡(luò)圖片,通過BaseImageDownloader獲得輸入流,

 網(wǎng)絡(luò)請求采用的是HttpURLConnection。

Freco圖片加載框架:

1.緩存

在5.0以下系統(tǒng),Bitmap緩存位于ashmem,這樣Bitmap對象的創(chuàng)建和釋放將不會引發(fā)GC,更少的GC會使你的APP運行得更加流暢。

5.0及其以上系統(tǒng),相比之下,內(nèi)存管理有了很大改進(jìn),所以Bitmap緩存直接位于Java的heap上。

當(dāng)應(yīng)用在后臺運行是,該內(nèi)存會被清空。

2.漸進(jìn)式JPEG圖

Fresco 支持漸進(jìn)式的網(wǎng)絡(luò)JPEG圖。在開始加載之后,圖會從模糊到清晰漸漸呈現(xiàn)。

你可以設(shè)置一個清晰度標(biāo)準(zhǔn),在未達(dá)到這個清晰度之前,會一直顯示占位圖。

漸進(jìn)式JPEG圖僅僅支持網(wǎng)絡(luò)圖。

3.漸進(jìn)式JPEG圖

   

  


網(wǎng)站題目:優(yōu)秀的開源框架學(xué)習(xí)
本文路徑:http://weahome.cn/article/jhipsi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部