MessageDigest
http://blog.csdn.net/hudashi/article/details/8394158
用于為應(yīng)用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法浙踢。簡(jiǎn)單點(diǎn)說(shuō)就是用于生成散列碼绢慢。信息摘要是安全的單向哈希函數(shù),它接收任意大小的數(shù)據(jù)洛波,輸出固定長(zhǎng)度的哈希值胰舆。
MessageDigest 通過(guò)其getInstance系列靜態(tài)函數(shù)來(lái)進(jìn)行實(shí)例化和初始化。MessageDigest 對(duì)象通過(guò)使用 update 方法處理數(shù)據(jù)奋岁。任何時(shí)候都可以調(diào)用 reset方法重置摘要思瘟。一旦所有需要更新的數(shù)據(jù)都已經(jīng)被更新了,應(yīng)該調(diào)用 digest 方法之一完成哈希計(jì)算并返回結(jié)果闻伶。
對(duì)于給定數(shù)量的更新數(shù)據(jù)滨攻,digest方法只能被調(diào)用一次。digest
方法被調(diào)用后蓝翰,MessageDigest 對(duì)象被重新設(shè)置成其初始狀態(tài)光绕。
LinkedBlockingDeque:雙向并發(fā)阻塞隊(duì)列
http://www.tuicool.com/articles/AfIv6v
從數(shù)據(jù)結(jié)構(gòu)和功能需求上可以得到以下結(jié)論:
1.要想支持阻塞功能,隊(duì)列的容量一定是固定的畜份,否則無(wú)法在入隊(duì)的時(shí)候掛起線程诞帐。也就是capacity是final類型的。
2.既然是雙向鏈表爆雹,每一個(gè)結(jié)點(diǎn)就需要前后兩個(gè)引用停蕉,這樣才能將所有元素串聯(lián)起來(lái),支持雙向遍歷钙态。也即需要prev/next兩個(gè)引用慧起。
3.雙向鏈表需要頭尾同時(shí)操作,所以需要first/last兩個(gè)節(jié)點(diǎn)册倒,當(dāng)然可以參考LinkedList那樣采用一個(gè)節(jié)點(diǎn)的雙向來(lái)完成蚓挤,那樣實(shí)現(xiàn)起來(lái)就稍微麻煩點(diǎn)。
4.既然要支持阻塞功能驻子,就需要鎖和條件變量來(lái)掛起線程灿意。這里使用一個(gè)鎖兩個(gè)條件變量來(lái)完成此功能。
有了上面的結(jié)論再來(lái)研究LinkedBlockingDeque的優(yōu)缺點(diǎn)崇呵。
1.優(yōu)點(diǎn)當(dāng)然是功能足夠強(qiáng)大缤剧,同時(shí)由于采用一個(gè)獨(dú)占鎖,因此實(shí)現(xiàn)起來(lái)也比較簡(jiǎn)單域慷。所有對(duì)隊(duì)列的操作都加鎖就可以完成鞭执。同時(shí)獨(dú)占鎖也能夠很好的支持雙向阻塞的特性司顿。
2.凡事有利必有弊芒粹。缺點(diǎn)就是由于獨(dú)占鎖兄纺,所以不能同時(shí)進(jìn)行兩個(gè)操作,這樣性能上就大打折扣化漆。從性能的角度講LinkedBlockingDeque要比LinkedBlockingQueue要低很多估脆,比CocurrentLinkedQueue就低更多了,這在高并發(fā)情況下就比較明顯了
LIFOLinkedBlockingDeque
后進(jìn)先出阻塞隊(duì)列座云。重寫LinkedBlockingDeque的offer(…)函數(shù)如下:
public boolean offer(T e) {
return super.offerFirst(e);
}
讓LinkedBlockingDeque插入總在最前疙赠,而remove()本身始終刪除第一個(gè)元素,所以就變?yōu)榱撕筮M(jìn)先出阻塞隊(duì)列朦拖。
ThreadPoolExecutor
http://825635381.iteye.com/blog/2184680
ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
corePoolSize: 線程池維護(hù)線程的最少數(shù)量
maximumPoolSize:線程池維護(hù)線程的最大數(shù)量
keepAliveTime: 線程池維護(hù)線程所允許的空閑時(shí)間
unit: 線程池維護(hù)線程所允許的空閑時(shí)間的單位
workQueue: 線程池所使用的緩沖隊(duì)列
threadFactory:新建線程工廠(繼承ThreadFactory)
handler: 線程池對(duì)拒絕任務(wù)的處理策略
AtomicInteger
http://blog.csdn.net/u012734441/article/details/51619751
AtomicInteger介紹
AtomicInteger是一個(gè)提供原子操作的Integer類圃阳,通過(guò)線程安全的方式操作加減。
AtomicInteger使用場(chǎng)景
AtomicInteger提供原子操作來(lái)進(jìn)行Integer的使用璧帝,因此十分適合高并發(fā)情況下的使用
LinkedHashMap
http://www.cnblogs.com/yejg1212/archive/2013/04/01/2992921.html
http://blog.csdn.net/ns_code/article/details/37867985
非線程安全的捍岳,只在單線程環(huán)境下使用
public LinkedHashMap(
int initialCapacity, float loadFactor, boolean accessOrder)
參數(shù)說(shuō)明:
initialCapacity 初始容量大小,使用無(wú)參構(gòu)造方法時(shí)睬隶,此值默認(rèn)是16
loadFactor 加載因子锣夹,使用無(wú)參構(gòu)造方法時(shí),此值默認(rèn)是 0.75f
accessOrder false: 基于插入順序 true: 基于訪問(wèn)順序 (基于訪問(wèn)的順序苏潜,get一個(gè)元素后银萍,這個(gè)元素被加到最后(使用了LRU 最近最少被使用的調(diào)度算法))
以下BaseImageDownloader.java
**Android 中的MimeType與MimeTypeMap **
Android中MimeType的用途
Intent-Filter中的<data>有一個(gè)mimeType . 它的作用是告訴Android系統(tǒng)本Activity可以處理的文件的類型。如設(shè)置為 “text/plain”表示可以處理“.txt”文件恤左。
MimeTypeMap類
MimeTypeMap類是專門處理mimeType的類
** ThumbnailUtils工具類來(lái)是實(shí)現(xiàn)縮略圖**
Bitmap createVideoThumbnail(String filePath, int kind)
創(chuàng)建一張視頻的縮略圖贴唇。如果視頻已損壞或者格式不支持可能返回null
Bitmap extractThumbnail(Bitmap source, int width, int height, int options)
創(chuàng)建所需尺寸居中縮放的位圖。
參數(shù): source: 需要被創(chuàng)造縮略圖的源位圖對(duì)象
width: 生成目標(biāo)的寬度
height: 生成目標(biāo)的高度
options:在縮略圖抽取時(shí)提供的選項(xiàng)
bitmap.compress(Bitmap.CompressFormat.JPEG, 30, baos);//30 是壓縮率飞袋,表示壓縮70%; 如果不壓縮是100戳气,表示壓縮率為0
Uri.parse(string)
通用資源標(biāo)志符(Universal Resource Identifier, 簡(jiǎn)稱"URI")。Uri代表要操作的數(shù)據(jù)授嘀,Android上可用的每種資源 - 圖像物咳、視頻片段等都可以用Uri來(lái)表示。Android平臺(tái)而言蹄皱,URI主要分三個(gè)部分:
scheme
authority
path
其中authority又分為host和port览闰。格式如下:
scheme://host:port/path
實(shí)際的例子:
我們很經(jīng)常需要解析Uri,并從Uri中獲取數(shù)據(jù)巷折。Android系統(tǒng)提供了兩個(gè)用于操作Uri的工具類压鉴,分別為UriMatcher 和ContentUris
Android下的Intent與Uri開(kāi)發(fā)
Uri uri = Uri.parse("macappstores://itunes.apple.com:80/us/app/xcode/id497799835?mt=12#retry");
String scheme = uri.getScheme();//macappstores
int port = uri.getPort();//80
String host = uri.getHost();//itunes.apple.com
String path = uri.getPath();//us/app/xcode/id497799835
List<String > a = uri.getPathSegments();//{"us","app","xcode","id497799835"}
String last = uri.getLastPathSegment();//id497799835
String mt = uri.getQueryParameter("mt");//12
String authority = uri.getAuthority();//itunes.apple.com:80
String fragment = uri.getFragment();//retry
Android之MediaStore
我們經(jīng)常會(huì)使用MediaStore來(lái)獲取手機(jī)的音頻、圖片锻拘、視頻等相關(guān)信息油吭。下面3個(gè)是常見(jiàn)的內(nèi)部類:
MediaStore.Audio獲取音頻信息的類
MediaStore.Images獲取圖片信息
MediaStore.Video獲取視頻信息