聊一聊Android的第三方开发组件
源地址:http://fanxu.me/post/2013-06-06-1
AndroidAnnotation
官方網站
首先推薦AndroidAnnotation, 按官方網站的說法就是
Fast Android Development. Easy maintainance。
AndroidAnnotation的ViewByID,Preference,UI線程,后臺線程,點擊事件處理等特性, 可以讓你少些非常多代碼, 非常顯著的提高android開發效率。
AndroidAnnotation利用的是java的annotation, 類似于預編譯指令, 在編譯時生成代碼, 再進行編譯。所以不管是用eclipse還是用idea都需要經過一些配置。配置的方法在官方文檔都有介紹, 非常簡單。文檔地址
Android-Query
官方網站地址
Android-Query(AQuery) 是用來處理網絡請求和操作ui的組件。官方對這個組件的定位是:
Our goal is to make Android coding simpler, easier, and more fun!
AQuery 提供一種對ui的鏈式處理方式, 試圖簡化ui操作的代碼。
public void renderContent(Content content, View view) { AQuery aq = new AQuery(view); aq.id(R.id.icon).image(R.drawable.icon).visible().clicked(this, "someMethod"); aq.id(R.id.name).text(content.getPname());aq.id(R.id.time).text(FormatUtility.relativeTime(System.currentTimeMillis(), content.getCreate())).visible();aq.id(R.id.desc).text(content.getDesc()).visible(); } 個人比較喜歡的不是這部分對ui的操作, 我一般用AndroidAnnoation直接處理ui操作, 那更簡潔更接近Android原生處理的方式。
AQuery最優秀的是對網絡請求的處理, 它支持異步網絡請求, 網絡請求緩存。
以上代碼自動加載指定鏈接的圖片, 并在加載完畢后顯示在相應的組件上。若是自己寫代碼加載圖片, 那叫一個痛苦啊。
還有更牛逼的。
//load an image from network, but only cache with file//this image is huge, avoid memory caching boolean memCache = false; boolean fileCache = true;aq.id(R.id.image1).image("http://www.vikispot.com/z/images/vikispot/android-w.png", memCache, fileCache);以上代碼, 自動將圖片緩存在文件里, 下次再加載圖片就不用再發起網絡請求了。
更況且, 這么牛逼的組件大小只有96.5KB。
Google Cloud Message, GCM
許多人不敢用GCM,一個是擔心網絡被墻, 一個是擔心Google服務框架的普及度。國內google服務確實很多被墻, 非常不穩定。 但GCM卻是例外, 看看你的gmail的新郵件通知, 你就明白了。而對于Google服務框架在手機的普及度, 我想我們不用太擔心, 的確是很多山寨機的rom里面沒有帶著個Google服務框架, 但大部分正規廠商已經非常重視這個問題, 像華為,中興,魅族,小米等都有內嵌Google服務框架。另外, 并不是說沒有Google Market, Google Sync, 就不能用GCM, 在部分華為手機上就是這樣。
千萬要慎重考慮自己搭建push服務器, 這個成本, 不管是開發成本還是維護成本, 都是小的創業公司難以承受的。Push 服務與傳統的網頁服務器有很大的區別, 傳統的網頁服務器請求過程短, 連接建立, 請求,回復,斷開連接, 沒有長期與服務器建立連接,不會給服務器造成很大的壓力。而Push 服務就很不同, 技術實現也非常不同, 需要長時間與服務器建立連接, 空閑度很高,效益比很低。
我是做國外產品的, 利用Google Analytics 做過簡單的統計,有近99.32%的設備是支持GCM的。
GCM做的真是不錯, 我是吃過虧的。 中國人就是貪, 什么事情都想自己做, 什么都做不好。 我們自己做過Push服務, 結果 開發難度,效果和維護成本我們都很難承受;可是老板要, 我們只能硬著頭皮上, 做到后面又被迫遷移到GCM上來。
GCM的效果非常好, 只要是網絡有連接, 不管是你的手機怎么樣, 都可以立即通知到消息。
這個組件的配置方式很簡單, 說明文檔在android開發者網站.
最近看了MiUI v5,發現這貨竟然開始不內嵌Google Service Framework了, 既然這樣, 上面的啰嗦, 大家就視而不見了吧。
據說國內做的比較好的是個推, 沒試過, 不知道怎么樣。
Google Analytics
谷歌分析不是必須的, 你可以選擇國內的友盟統計。 友盟的統計會相對簡單了些, 但應該能滿足日常的需求。
再啰嗦一句, 千萬也不要自行統計。 不光服務器代碼要自己開發, 手機端還要處理網絡不存在時的緩存處理。 最難的是還要自己寫腳本分析數據。 不說別的, 光一個簡單的用戶地理位置分析, 估計就能搞死你。
所以, 我的同胞們, 我們的老板們, 現成的優秀的組件要會用, 不要什么都自己想著自己做, 你是做產品的不是做統計的, 那是友盟的活, 你都做了人家怎么活?
greenDAO
網站
這是我認為最好的Android ORM了。Android支持SQlite數據庫, 但那個數據庫操作叫一個復雜啊, 不光代碼難看, 維護起來還非常不方便。一般我都不用數據庫存儲, 能文件就文件存儲了, 直到我直到了greenDAO。 這貨解決了一個大難題。
greenDAO分成兩部分, 一部分用于生成數據庫操作代碼, 一部分用于在Android工程里面提供底層支持。greenDAO對每一個表都生成相應的對象, 在查詢,插入等操作時只需要對這個對象進行操作就可以了。可以非常優雅的完成數據庫操作的指令。
我知道某些服務器后端程序員,開始撅嘴了:笑話, 我們服務器后端有多少多少好的ORM, 不知道比你這個好上多少倍!?
我們是搞Android開發的好不好, android才不過五六年的時間好不好!
我們先來看看一段代碼:
QueryBuilder qb = userDao.queryBuilder(); qb.where(Properties.FirstName.eq("Joe"), qb.or(Properties.YearOfBirth.gt(1970), qb.and(Properties.YearOfBirth.eq(1970), Properties.MonthOfBirth.ge(10)))); List youngJoes = qb.list();這就是greenDAO里面的數據庫查詢, 簡單吧? 趕快來用用吧!
Log4j
官方網站
做軟件開發, 沒有個日志組件是不行的。 Android原生的日志服務太簡陋了, 連輸出的文件都沒有。
android-log4j配置稍微有些麻煩, 需要下載多個jar包, 包括log4j, android-log4j等。 我自己用proguard封了一個包, 用來輸出日志到文件沒有問題, 提供給大家。下載地址
final LogConfigurator lc = new LogConfigurator(); lc.setFileName(PATH_LOGGER_FILE);//日志文件路徑 lc.setFilePattern("%d - [%-6p-%c] - %m%n");//日志輸出格式 lc.setMaxBackupSize(2);//最多的文件備份個數, 超過后log4j將自行刪除 lc.setMaxFileSize(1024 * 1024);//最大的日志大小, 超過后log4j將備份下來, 再新建一個文件。 lc.setRootLevel(Level.DEBUG); // Set log level of a specific logger lc.setLevel("org.apache", Level.DEBUG); lc.configure();把上述代碼, 放在程序初始化的過程中。
private Logger logger = Logger.getLogger("LoggerName"); logger.debug("Log text");就可以輸出日志到文件了。
Common IO
官方網站
Common IO跟log4j同屬于Apache開源基金會。 主要對文件操作, 數據流操作提供了非常多簡單的函數。
gson
官方網站
不知道大家平常與服務器端做數據通信是用什么協議的, 千萬不要自己發明啊。我見過最奇葩的通信協議是: 一個字段標示后面數據的長度, 然后拼接成字節數組作為通信協議。這種方式開發難不說, 調試起來非常不方便。 更奇葩的是, 還有人一直堅持的這么用, 真是不思進取啊。
我們經常用的是json。 協議非常簡單, 還是明文的, 非常容易調試。 前后端合作非常順暢。
gson的工作是把json的字符串直接轉換為java的對象, 也可以把java的對象直接轉換為字符串。 使用方式非常簡單。
另外google有一個非常高效的數據協議叫protobuf,據說也很好, 不過數據沒有json明文好調試, 一直都沒有用。
最后還要吐槽下:若是網絡鏈接是https, 不管是url還是返回的數據都是加密傳輸的, 不需要再什么DES加密一次了, 這是多次一舉。
總結
以上是生活随笔為你收集整理的聊一聊Android的第三方开发组件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构试卷(一)
- 下一篇: com.android.yf.idp,Q