自己總結的目前Android通用的流行框架大全
Android 通用流行框架大全
1、效能優化
1.1、記憶體洩漏檢測(LeakCanary)
1.1.1、LeakCanary.install(this);//初始化
1.2、奔潰報告(ARCA Application Report For Android)
1.2.1、當你的程式奔潰時,會給開發者傳送一個Report。即使程式沒有奔潰,也會發送錯誤Report。
2、除錯框架
2.1、Stetho(Facebook開發的工具)
2.1.1、 Stetho.initializeWithDefaults(this);
2.1.2、評價:android3.0後這個功能都直接整合在IDE中了。
3、測試框架
3.1、Mockito
3.1.1、mock測試就是在測試過程中,對那些不容易構建的物件用一個虛擬物件來代替測試的方法
3.2、Robotium
3.3、Robolectric
4、Log框架
4.1、Logger 使用方式:String userName = "Jerry" Logger.i(userName);
4.1.1、執行緒的資訊
4.1.2、類的資訊
4.1.3、方法的資訊
4.1.4、格式列印json、xml
4.1.5、點選連結跳轉到原始碼列印處
//能夠自由選擇列印以上五種型別的資訊
4.2、Hugo 使用方式:classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1'
4.2.1、註解@DebugLog
4.3、Timer 使用方式:compile 'com.jakewharton.timber:timber:4.1.2'
4.3.1、在application裡面的onCreate()裡面註冊
5、響應式程式設計
5.1、Rx系列 相關連結:http://gank.io/post/560e15be2dca930e00da1083
5.1.1、RxJava (包含了四個物件 Observable Observer Subscribe Event)
5.1.1.1、隨著程式邏輯變得越來越複雜,它依然能夠保持簡潔
5.1.2、RxJavaJoins
5.1.3、RxAndroid
5.1.4、RxBinding
5.1.4.1、簡介:是 Jake Wharton 的一個開源庫,它提供了一套在 Android 平臺上的基於 RxJava 的 Binding API。所謂 Binding,就是類似設定 OnClickListener 、設定 TextWatcher 這樣的註冊繫結物件的 API。
5.2、Agera 使用方式:compile 'com.google.android.agera:agera:1.0.0-rc2'
5.2.1、簡介:類似於RxJava
6、事件匯流排
6.1、EventBus
6.1.1、簡介:EventBus是一個訊息匯流排,以觀察者模式實現,用於簡化程式的元件、執行緒通訊,可以輕易切換執行緒、開闢執行緒。EventBus3.0跟先前版本的區別在於加入了annotation @Subscribe,取代了以前約定命名的方式。
6.1.2、一般使用方式:OnCreate()註冊,OnDestroy反註冊
6.2、Otto
6.2.1、簡介:otto基於Guava專案的Android支援庫,如果你在Android程式開發的過程中想要不同的元件之間進行有效的通訊可以使用這個庫。通過otto庫可以降低程式之間的耦合性。
6.2.2、一般使用方式:@subscrible
7、後臺處理
7.1、Tape
7.1.1、簡介:一個輕快的、事務性的、基於檔案的FIFO的庫
7.2、Android Priority JobQueue 使用方式:compile 'com.birbit:android-priority-jobqueue:1.3.5'
7.2.1、簡介:Android Priority Job Queue是一款專門為Android平臺編寫,實現了Job Queue的後臺任務佇列類庫,能夠輕鬆的在後臺執行定時任務,提高使用者體驗和應用的穩定性。
7.2.2、比如有3個執行緒,在執行前三個job的OnAdd()方法,同時執行job1的OnRun()方法。
8、圖示
8.1、WilliamChart
8.1.1、畫圖控制元件 開源原始碼:https://github.com/diogobernardino/WilliamChart
8.2、HelloCharts
8.2.1、簡介:hellocharts是一個用來生成統計圖表的三方庫,目前支援折線圖、柱狀圖和餅狀圖等常見圖表。支援縮放、滑動和動畫效果。是一個非常實用的Android平臺的圖示庫
8.2.1.1、Line chart 線圖
8.2.1.2、Column chart 柱形圖
8.2.1.3、Pie chart 餅圖
8.2.1.4、Bubble chart 泡泡圖
8.2.1.5、Combo chart 柱圖和線圖的組合圖
8.2.1.6、Preview charts 預覽圖
8.3、MPAndroidCharts
8.3.1、簡介:支援線狀圖、柱狀圖、散點圖、燭狀圖、氣泡圖、餅狀圖和蜘蛛網狀圖
支援縮放、拖動(平移)、選擇和動畫
適用於 Android 2.2 ( API 8 ) 和以上
9、依賴注入
9.1、ButterKnife
9.1.1、使用方式:@BindView(R.id.tv_a TextView tv_a)
9.2、Dagger2
9.2.1、使用方式:dagger2是一個依賴注入框架,在編譯期間自動生成程式碼,負責依賴物件的建立。
9.3、AndroidAnotations 使用方式:@EActivity @ ViewById @Click
9.3.1、使用依賴注入(Dependency Injection)
9.3.2、簡化的執行緒模型(Simplified threading model)
9.3.3、事件繫結(Event binding)
9.3.4、REST Client
9.3.5、No Magic
9.4、RoboGuice
9.4.1、方便findViewById在XML中查詢一個View,並將其強制轉換到所需型別
9.4.2、check for null when you getIntent().getExtras()
9.4.3、Less code means fewer opportunities for bugs
10、快取
10.1、DiskLruCache(Lru磁碟快取)
10.1.1、防止多圖OOM的核心解決思路
10.1.1.1、本地快取路徑 SD卡 /sdcard/Android/data/<application package>/cache
10.1.1.2、本地快取路徑 本機 /data/data/<application package>/cache
10.1.1.3、獲取快取地址:public File getDiskCacheDir(Context context, String uniqueName) {
String cachePath;
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
|| !Environment.isExternalStorageRemovable()) {
cachePath = context.getExternalCacheDir().getPath();
} else {
cachePath = context.getCacheDir().getPath();
}
return new File(cachePath + File.separator + uniqueName);
}
10.1.1.4、獲取當前版本號:public int getAppVersion(Context context) {
try {
PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
return info.versionCode;
} catch (NameNotFoundException e) {
e.printStackTrace();
}
return 1;
}
10.1.2、寫入快取
10.1.3、讀取快取
10.1.4、刪除快取
11、圖片載入
11.1、Android Universal Image Loader
11.1.1、多執行緒下載圖片,圖片可以來源於網路,檔案系統,專案資料夾assets中以及drawable中等
11.1.2、支援隨意的配置ImageLoader,例如執行緒池,圖片下載器,記憶體快取策略,硬碟快取策略,圖片顯示選項以及其他的一些配置
11.1.3、支援圖片的記憶體快取,檔案系統快取或者SD卡快取
11.1.4、支援圖片下載過程的監聽
11.1.5、根據控制元件(ImageView)的大小對Bitmap進行裁剪,減少Bitmap佔用過多的記憶體
11.1.6、較好的控制圖片的載入過程,例如暫停圖片載入,重新開始載入圖片,一般使用在ListView,GridView中,滑動過程中暫停載入圖片,停止滑動的時候去載入圖片
11.1.7、提供在較慢的網路下對圖片進行載入
11.2、Picasso 使用方式:compile 'com.squareup.picasso:picasso:2.5.2'
11.2.1、RequestHandler
11.2.2、BitmapHunter
11.2.3、PicassoDrawable
11.2.4、DeferredRequestCreator
11.2.5、Action
//以上為Picasso的主要類
11.3、Fresco
11.3.1、Image Pipeline 它負責從網路,從本地檔案系統,本地資源載入圖片。為了最大限度節省空間和CPU時間,它含有3級快取設計(2級記憶體,1級磁碟)。
11.3.2、Drawees 它會在圖片載入完成前顯示佔位圖,載入成功後自動替換為目標圖片。當圖片不再顯示在螢幕上時,它會及時地釋放記憶體和空間佔用。
//五個主要的功能
11.3.3、記憶體管理
11.3.4、圖片載入
11.3.5、圖片繪製
11.3.6、圖片的漸進式呈現
11.3.7、動態載入
11.4、Glide 使用方式:compile 'com.github.bumptech.glide:glide:3.7.0'
11.4.1、Glide.with(context).resumeRequests()和 Glide.with(context).pauseRequests()
當列表在滑動的時候,呼叫pauseRequests()取消請求,滑動停止時,呼叫resumeRequests()恢復請求
11.4.2、Glide.clear()
當你想清除掉所有的圖片載入請求時,這個方法可以幫助到你。
11.4.3、ListPreloader
如果你想讓列表預載入的話,不妨試一下ListPreloader這個類。
12、圖片處理
12.1、Picasso-transformations
12.1.1、基於Picasso的圖片處理庫,包括圖片裁剪等
12.2、Glide-transformations
12.2.1、基於Glide的transformation庫,擁有裁剪,著色,模糊,濾鏡等多種轉換效果
12.3、Android-gpuimage 使用方式:compile'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1'
12.3.1、new GPUImageGrayscaleFilter() 濾鏡處理,new一個物件為一種處理效果
13、網路解析
13.1、json解析
13.1.1、Gson
13.1.1.1、fromJson() 實現反序列化
13.1.1.2、toJson() 實現序列化
13.1.1.3、@SerializedName註解
13.1.2、Jackson
13.1.2.1、Streanming API
13.1.2.2、Tree Model
13.1.2.3、Data Binding
13.1.2.4、json 轉換為 list:
public static <T> List<T> jsonToList(String jsonStr,
Class<?> collectionClass, Class<?>... elementClasses)
throws Exception {
ObjectMapper mapper = new ObjectMapper();
JavaType javaType = mapper.getTypeFactory().constructParametricType(
collectionClass, elementClasses);
return mapper.readValue(jsonStr, javaType);
}
13.1.3、Fastjson Alibaba開發的一個框架
13.1.3.1、快速FAST (比其它任何基於Java的解析器和生成器更快,包括jackson)
13.1.3.2、強大(支援普通JDK類包括任意Java Bean Class、Collection、Map、Date或enum)
13.1.3.3、 零依賴(沒有依賴其它任何類庫除了JDK)
13.2、html解析
13.2.1、HtmlParser
13.2.1.1、org.htmlparser 定義了htmlparser的一些基礎類,其中最為重要的是Parser。Parser是htmlParser的最核心的類。
13.2.1.2、org.htmlparser.beans 對Visitor和Filter的方法進行了封裝,定義了針對一些常用HTML元素操作的JavaBean,簡化對常用元素的提取操作。包括:FilterBean、HTMLLinkBean、HTMLTextBean、LinkBean、StringBean、BeanyBaby等。
13.2.1.3、org.htmlparser.nodes 定義了基礎的node,包括:AbstractNode、RemarkNode、TagNode、TextNode等。 Node是形成樹結構表示HTML的基礎,所有的資料表示都是介面Node的實現。
13.2.1.4、org.htmlparser.tags 定義了HtmlParser進行解析的網頁中的各種標籤。
13.2.1.5、org.htmlparser.filters 定義了各種過濾器filter,主要通過extractAllNodesThatMatch (NodeFilter filter)來對html頁面指定型別的元素進行過濾,包括:AndFilter、CssSelectorNodeFilter、HasAttributeFilter、HasChildFilter、HasParentFilter、HasSiblingFilter、IsEqualFilter、LinkRegexFilter、LinkStringFilter、NodeClassFilter、NotFilter、OrFilter、RegexFilter、StringFilter、TagNameFilter、XorFilter
13.2.1.6、org.htmlparser.visitors 定義了各種訪問者visitor,主要通過visitAllNodesWith (NodeVisitor visitor)來對html頁面元素進行遍歷,包括:HtmlPage、LinkFindingVisitor、NodeVisitor、ObjectFindingVisitor、StringFindingVisitor、TagFindingVisitor、TextExtractingVisitor、UrlModifyingVisitor
13.2.1.7、org.htmlparser.parserapplications 定義了一些實用的工具,包括LinkExtractor、SiteCapturer、StringExtractor、WikiCapturer,這幾個類也可以作為HtmlParser使用樣例。
13.2.1.8、org.htmlparser.tests 各種功能的單元測試用例,可作為HtmlParser使用的樣例。
13.2.2、Jsoup Jsoup是一款比較好的Java版HTML解析器。可直接解析某個URL地址、HTML文字內容。它提供了一套非常省力的API,可通過DOM,CSS以及類似於jQuery的操作方法來取出和操作資料。
13.2.2.1、從一個URL,檔案或字串中解析HTML
13.2.2.2、使用DOM或CSS選擇器來查詢、取出資料
13.2.2.3、可操作HTML元素、屬性、文字
14、資料庫
14.1、OrmLite(Object Relational Mapping)
14.2、SugarORM 使用方式: compile 'com.github.satyan:sugar:1.5'
14.2.1、配置AndroidManifest.xml
14.2.2、建立實體類
14.2.3、儲存entity .save()
14.2.4、載入entity .findById()
14.2.5、刪除entity .delete()
14.2.6、批量操作 .deleteAll()
14.3、GreenDAO 使用方式:classpath 'org.greenrobot:greendao-gradle-plugin:3.1.0' 差不多都是同樣的操作 增刪查改
14.4、ActiveAndroid 使用方式:compile 'com.michaelpardo:activeandroid:3.1.0-SNAPSHOT' 一個開源的資料庫框架
14.5、SQLBrite 一個響應式的資料查詢框架 GitHub地址:https://github.com/square/sqlbrite
14.6、Realm 相關內容,檢視官方文件
14.6.1、Realm
14.6.2、RealmConfiguration
14.6.3、RealmObject
14.6.4、RealmList
14.6.5、RealmQuery
14.6.6、RealmResults
14.7、Litepal 比較熟悉一個,也是比較熟練的一個 在專案中經常運用到這個框架 匯入方便 操作方便
15、網路請求
15.1、Android Async HTTP
15.1.1、基本用法:
AsyncHttpClient client = new AsyncHttpClient();
client.get("http://www.google.com", new AsyncHttpResponseHandler() {
@Override
public void onSuccess(String response) {
System.out.println(response);
}
});
15.1.2、AsyncHttpRequest 繼承自Runnabler,被submit至執行緒池執行網路請求併發送start,success等訊息
15.1.3、AsyncHttpResponseHandler 接收請求結果,一般重寫onSuccess及onFailure接收請求成功或失敗的訊息,還有onStart,onFinish等訊息
15.1.4、TextHttpResponseHandler 繼承自AsyncHttpResponseHandler,只是重寫了AsyncHttpResponseHandler的onSuccess和onFailure方法,將請求結果由byte陣列轉換為String
15.1.5、TextHttpResponseHandler 繼承自TextHttpResponseHandler,同樣是重寫onSuccess和onFailure方法,將請求結果由String轉換為JSONObject或JSONArray
15.1.6、BaseJsonHttpResponseHandler 繼承自TextHttpResponseHandler,是一個泛型類,提供了parseResponse方法,子類需要提供實現,將請求結果解析成需要的型別,子類可以靈活地使用解析方法,可以直接原始解析,使用gson等。
15.1.7、 RequestParams 請求引數,可以新增普通的字串引數,並可新增File,InputStream上傳檔案
15.1.8、AsyncHttpClient 核心類,使用HttpClient執行網路請求,提供了get,put,post,delete,head等請求方法,使用起來很簡單,只需以url及RequestParams呼叫相應的方法即可,還可以選擇性地傳入Context,用於取消Content相關的請求,同時必須提供ResponseHandlerInterface(AsyncHttpResponseHandler繼承自ResponseHandlerInterface)的實現類,一般為AsyncHttpResponseHandler的子類,AsyncHttpClient內部有一個執行緒池,當使用AsyncHttpClient執行網路請求時,最終都會呼叫sendRequest方法,在這個方法內部將請求引數封裝成AsyncHttpRequest(繼承自Runnable)交由內部的執行緒池執行。
15.1.9、SyncHttpClient 繼承自AsyncHttpClient,同步執行網路請求,AsyncHttpClient把請求封裝成AsyncHttpRequest後提交至執行緒池,SyncHttpClient把請求封裝成AsyncHttpRequest後直接呼叫它的run方法。
15.2、AndroidAsync
15.3、OkHTTP 使用方式:https://github.com/square/okhttp
15.3.1、支援 SPDY ,共享同一個Socket來處理同一個伺服器的所有請求
15.3.2、如果SPDY不可用,則通過連線池來減少請求延時
15.3.3、無縫的支援GZIP來減少資料流量
15.3.4、快取響應資料來減少重複的網路請求
15.4、Retrofit 專案中經常用到的一個,很方便
15.5、Volley
15.5.1、Gson,影象等的非同步下載,不用在去考慮圖片下載的時候出現listview滾動過快,造成的沒有必要的資料請求。
15.5.2、網路請求的排序
15.5.3、快取的處理,代替了自己動手寫,或者ImageLoader
15.5.4、多級別的取消求情
15.5.5、Activity結束時同時取消所有網路請求