細(xì)節(jié)知識點(一)

MessageDigest
http://blog.csdn.net/hudashi/article/details/8394158
用于為應(yīng)用程序提供信息摘要算法的功能,如 MD5 或 SHA 算法。簡單點說就是用于生成散列碼。信息摘要是安全的單向哈希函數(shù),它接收任意大小的數(shù)據(jù),輸出固定長度的哈希值。
MessageDigest 通過其getInstance系列靜態(tài)函數(shù)來進(jìn)行實例化和初始化。MessageDigest 對象通過使用 update 方法處理數(shù)據(jù)。任何時候都可以調(diào)用 reset方法重置摘要。一旦所有需要更新的數(shù)據(jù)都已經(jīng)被更新了,應(yīng)該調(diào)用 digest 方法之一完成哈希計算并返回結(jié)果。
對于給定數(shù)量的更新數(shù)據(jù),digest方法只能被調(diào)用一次。digest
方法被調(diào)用后,MessageDigest 對象被重新設(shè)置成其初始狀態(tài)。

LinkedBlockingDeque:雙向并發(fā)阻塞隊列
http://www.tuicool.com/articles/AfIv6v
從數(shù)據(jù)結(jié)構(gòu)和功能需求上可以得到以下結(jié)論:
1.要想支持阻塞功能,隊列的容量一定是固定的,否則無法在入隊的時候掛起線程。也就是capacity是final類型的。
2.既然是雙向鏈表,每一個結(jié)點就需要前后兩個引用,這樣才能將所有元素串聯(lián)起來,支持雙向遍歷。也即需要prev/next兩個引用。
3.雙向鏈表需要頭尾同時操作,所以需要first/last兩個節(jié)點,當(dāng)然可以參考LinkedList那樣采用一個節(jié)點的雙向來完成,那樣實現(xiàn)起來就稍微麻煩點。
4.既然要支持阻塞功能,就需要鎖和條件變量來掛起線程。這里使用一個鎖兩個條件變量來完成此功能。
有了上面的結(jié)論再來研究LinkedBlockingDeque的優(yōu)缺點。
1.優(yōu)點當(dāng)然是功能足夠強大,同時由于采用一個獨占鎖,因此實現(xiàn)起來也比較簡單。所有對隊列的操作都加鎖就可以完成。同時獨占鎖也能夠很好的支持雙向阻塞的特性。
2.凡事有利必有弊。缺點就是由于獨占鎖,所以不能同時進(jìn)行兩個操作,這樣性能上就大打折扣。從性能的角度講LinkedBlockingDeque要比LinkedBlockingQueue要低很多,比CocurrentLinkedQueue就低更多了,這在高并發(fā)情況下就比較明顯了

LIFOLinkedBlockingDeque
后進(jìn)先出阻塞隊列。重寫LinkedBlockingDeque的offer(…)函數(shù)如下:
public boolean offer(T e) {
return super.offerFirst(e);
}
讓LinkedBlockingDeque插入總在最前,而remove()本身始終刪除第一個元素,所以就變?yōu)榱撕筮M(jìn)先出阻塞隊列。

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ù)線程所允許的空閑時間
unit: 線程池維護(hù)線程所允許的空閑時間的單位
workQueue: 線程池所使用的緩沖隊列
threadFactory:新建線程工廠(繼承ThreadFactory)
handler: 線程池對拒絕任務(wù)的處理策略

AtomicInteger
http://blog.csdn.net/u012734441/article/details/51619751
AtomicInteger介紹
AtomicInteger是一個提供原子操作的Integer類,通過線程安全的方式操作加減。
AtomicInteger使用場景
AtomicInteger提供原子操作來進(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ù)說明:
initialCapacity 初始容量大小,使用無參構(gòu)造方法時,此值默認(rèn)是16
loadFactor 加載因子,使用無參構(gòu)造方法時,此值默認(rèn)是 0.75f
accessOrder false: 基于插入順序 true: 基于訪問順序 (基于訪問的順序,get一個元素后,這個元素被加到最后(使用了LRU 最近最少被使用的調(diào)度算法))

以下BaseImageDownloader.java

**Android 中的MimeType與MimeTypeMap **
Android中MimeType的用途
Intent-Filter中的<data>有一個mimeType . 它的作用是告訴Android系統(tǒng)本Activity可以處理的文件的類型。如設(shè)置為 “text/plain”表示可以處理“.txt”文件。
MimeTypeMap類
MimeTypeMap類是專門處理mimeType的類

** ThumbnailUtils工具類來是實現(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)造縮略圖的源位圖對象
width: 生成目標(biāo)的寬度
height: 生成目標(biāo)的高度
    options:在縮略圖抽取時提供的選項

bitmap.compress(Bitmap.CompressFormat.JPEG, 30, baos);//30 是壓縮率,表示壓縮70%; 如果不壓縮是100,表示壓縮率為0

Uri.parse(string)
通用資源標(biāo)志符(Universal Resource Identifier, 簡稱"URI")。Uri代表要操作的數(shù)據(jù),Android上可用的每種資源 - 圖像、視頻片段等都可以用Uri來表示。Android平臺而言,URI主要分三個部分:
scheme
authority
path
其中authority又分為host和port。格式如下:
scheme://host:port/path
實際的例子:

我們很經(jīng)常需要解析Uri,并從Uri中獲取數(shù)據(jù)。Android系統(tǒng)提供了兩個用于操作Uri的工具類,分別為UriMatcher 和ContentUris

Android下的Intent與Uri開發(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)常會使用MediaStore來獲取手機的音頻、圖片、視頻等相關(guān)信息。下面3個是常見的內(nèi)部類:
MediaStore.Audio獲取音頻信息的類
MediaStore.Images獲取圖片信息
MediaStore.Video獲取視頻信息

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,777評論 25 709
  • 第三章 Java內(nèi)存模型 3.1 Java內(nèi)存模型的基礎(chǔ) 通信在共享內(nèi)存的模型里,通過寫-讀內(nèi)存中的公共狀態(tài)進(jìn)行隱...
    澤毛閱讀 4,493評論 2 21
  • ¥開啟¥ 【iAPP實現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個線程,因...
    小菜c閱讀 7,295評論 0 17
  • 把要做的事情寫在紙上。豎型排版。時間按照十五分鐘一個單位,精確到每個任務(wù)的每個百分比。A4紙上被分出好幾個象限,工...
    軼哲安生閱讀 213評論 0 0
  • 我和打錄靈魂35:打錄父言子語31集 記錄者:余俊娟 時間:20170926,周二 啾啾說記筆記:導(dǎo)師怎么說/我的...
    余俊娟閱讀 187評論 0 0

友情鏈接更多精彩內(nèi)容