Part1:
由於在我們的程序中,不允許一些耗時的任務在主線程中出現,主要是爲了防止阻塞主線程而導致的 Anr(Application not Responding),一些耗時任務主要包括:
網絡訪問,緩慢的磁盤操作,比較耗時的算法
當我們的主線程在一定時間裏對某一事件的處理超過一定時間後會主線程會崩潰報ANR,
通常的解決方案:採用子線程技術來將耗時任務與主線程進行脫離
1、handler機制
只需要將UI更新參數在子線程中使用sendMessage發送到定義好的Handler裏的handleMessage裏既可以在主線程中更新UI(Handler實現了從子線程到主線程之間的跳轉)
2、runOnUiThread方法
使用這個方法,既可以使得當前主線程獲取cpu資源,從而進行UI的更新(至於如何從子線程中返回數據,方法很多,比如使用接口來回調獲取參數)
3、使用我們熟悉的AsyncTask類
Part2:網絡訪問
大家都熟知的右HttpClient和HttpUrlConnection兩種方式,當然還有像Volley和OkHttp以及AsyncHttpClient
針對前兩種最原始基礎的方式,是不具備異步處理能力的,也就是需要我們配合part1裏的異步處理框架來使用,否則就只能接受ANR這赤裸裸的尷尬
Volley則是具備了異步訪問的能力而且訪問結束的回調方法是處於主線程中的,這樣就可以直接脫離異步訪問框架來單獨使用了(還能夠替代Universal-Image-Loader異步加載圖片喔)Volley使用詳解
AsyncHttpClient則是對HttpClient的一種異步封裝,它對於Volley的一個缺陷就是回調方法依然處於子線程中,我們依然需要使用part1裏的異步框架來解決問題