摘要:過去的時間裏,Android開發逐步走向成熟。而不管出現多少Android相關的開發工具,咱們天天使用的大量開源庫卻始終是不可或缺的。這裏,向你們介紹的是,這個不辭辛苦的你們庭中,最受開發者喜好的五個Android庫。html
過去的時間裏,Android開發逐步走向成熟,一個個與Android相關的開發工具也層出不窮。不過,在面對各類新鮮事物時,不要忘了那些咱們天天使用的大量開源庫。在這裏,向你們介紹的就是,在這個不辭辛苦的你們庭中,最受開發者喜好的五個Android庫。但願經過對它們的瞭解,可以對你的開發工做有所幫助。java
1. GSONandroid
Gson是Google提供的用來在Java對象和JSON數據之間進行映射的Java類庫。可用於將Java對象轉換成對應的JSON表示,也能夠將JSON字符串轉換成一個等效的Java對象。若是與API打交道的話,那麼這將會是你常常須要的東西。咱們主要使用JSON的緣由就是,相較XML,輕量級的JSON要簡單的多。git
// Serialize String userJSON = new Gson().toJson(user); // Deserialize User user = new Gson().fromJson(userJSON, User.class);2. RETROFIT
就如它網站上的介紹「Retrofit將你的REST API變爲Java接口」同樣,Retrofit把REST API返回的數據轉化爲Java對象方便操做,對於在項目中組織API調用,是一個不錯的解決方案。其請求方法和相對URL都帶有註解,使得代碼變得更加簡潔。使用註解,你能夠很容易的添加一個請求主體,操縱URL或頭文件,並添加查詢參數。除此以外,每一個函數能夠定義爲同步或異步,具備返回值的函數爲同步執行,而異步函數沒有返回值且最後一個參數爲Callback對象。github
public interface RetrofitInterface { // asynchronously with a callback @GET("/api/user") User getUser(@Query("user_id") int userId, Callback<User> callback); // synchronously @POST("/api/user/register") User registerUser(@Body User user); } // example RetrofitInterface retrofitInterface = new RestAdapter.Builder() .setServer(API.API_URL).build().create(RetrofitInterface.class); // fetch user with id 2048 retrofitInterface.getUser(2048, new Callback<User>() { @Override public void success(User user, Response response) { } @Override public void failure(RetrofitError retrofitError) { } });Retrofit默認狀況下使用的是GSON,因此無需自定義解析,同時還支持其餘轉換器。
3. EVENTBUSsql
EventBus是用於簡化應用中各個部件之間通訊的一個庫。好比從一個Activity發送消息到一個正在運行的服務,亦或是片斷之間簡單的互動。而下面使用的示例,就是若是網絡鏈接丟失,該如何通知一個活動:數據庫
public class NetworkStateReceiver extends BroadcastReceiver { // post event if there is no Internet connection public void onReceive(Context context, Intent intent) { super.onReceive(context, intent); if(intent.getExtras()!=null) { NetworkInfo ni=(NetworkInfo) intent.getExtras().get(ConnectivityManager.EXTRA_NETWORK_INFO); if(ni!=null && ni.getState()==NetworkInfo.State.CONNECTED) { // there is Internet connection } else if(intent .getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY,Boolean.FALSE)) { // no Internet connection, send network state changed EventBus.getDefault().post(new NetworkStateChanged(false)); } } // event public class NetworkStateChanged { private mIsInternetConnected; public NetworkStateChanged(boolean isInternetConnected) { this.mIsInternetConnected = isInternetConnected; } public boolean isInternetConnected() { return this.mIsInternetConnected; } } public class HomeActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EventBus.getDefault().register(this); // register EventBus } @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); // unregister EventBus } // method that will be called when someone posts an event NetworkStateChanged public void onEventMainThread(NetworkStateChanged event) { if (!event.isInternetConnected()) { Toast.makeText(this, "No Internet connection!", Toast.LENGTH_SHORT).show(); } } }4. ACTIVEANDROID
ActiveAndroid算是一個輕量級的ORM(對象關係映射),讓你無需編寫一個單獨的SQL語句,就能夠保存和檢索SQLite數據庫記錄。每一個數據庫記錄都被包裹整齊地歸爲一類,如delete()和save()的方法。api
擴展ActiveAndroid Model的對象可以保存在數據庫裏,如:緩存
user.save();能夠輕易替代大型SQL語句:
INSERT INTO Users (Nickname, Name, Address, City, PostalCode, Country) VALUES ('Batman','Bruce W','Palisades 21','Gotham','40000','USA');獲取全部用戶的例子:
List<User> users = new Select().from(User.class).execute();而其對應的SQL語句是這樣:
SELECT Nickname, Name, Address, City, PostalCode, Country FROM Users;
ActiveAndroid是移除大量,用於和數據庫一同工做的樣板代碼的一個很好的方法。固然除此以外,還有其餘開源解決方案,如GreenDAO和ORMLite。網絡
UIL是是一個開源項目,其目的就是提供一個可重複使用的儀器爲異步圖像加載、緩存和顯示。它的使用很簡單:
imageLoader.displayImage(imageUri, imageView);
儘管Picasso擁有更好的API,但其缺少自定義。而使用UIL構建器幾乎能夠配置全部(其中最重要的就是在抓取和緩存大型圖片時,Picasso會失敗)。
良好的開源庫會讓你的開發變得更簡單更快速,而廣泛流行的庫一般測試良好且易用使用。在大多狀況下,你能夠很容易的將它們從Maven中導入到Android Studio項目裏。將它們添加到相關性的build.gradle 文件。而且同步以後,在你的應用裏將可以很好的實現它們。
dependencies { compile 'com.google.code.gson:gson:2.2.4' compile 'com.squareup.okhttp:okhttp:1.3.0' compile 'com.squareup.retrofit:retrofit:1.3.0' compile 'de.greenrobot:eventbus:2.2.+' compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.1' }