[Android第三方类库]聊一聊Android的第三方开发组件
一個(gè)介紹第三方開發(fā)組件很好的文章
今天咱們聊聊Android的第三方開發(fā)組件。
AndroidAnnotation
官方網(wǎng)站
首先推薦AndroidAnnotation, 按官方網(wǎng)站的說法就是
Fast Android Development. Easy maintainance。
AndroidAnnotation的ViewByID,Preference,UI線程,后臺(tái)線程,點(diǎn)擊事件處理等特性, 可以讓你少些非常多代碼, 非常顯著的提高android開發(fā)效率。
AndroidAnnotation利用的是java的annotation, 類似于預(yù)編譯指令, 在編譯時(shí)生成代碼, 再進(jìn)行編譯。所以不管是用eclipse還是用idea都需要經(jīng)過一些配置。配置的方法在官方文檔都有介紹, 非常簡(jiǎn)單。文檔地址
Android-Query
官方網(wǎng)站地址
Android-Query(AQuery) 是用來處理網(wǎng)絡(luò)請(qǐng)求和操作ui的組件。官方對(duì)這個(gè)組件的定位是:
Our goal is to make Android coding simpler, easier, and more fun!
AQuery 提供一種對(duì)ui的鏈?zhǔn)教幚矸绞?#xff0c; 試圖簡(jiǎn)化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(); } 個(gè)人比較喜歡的不是這部分對(duì)ui的操作, 我一般用AndroidAnnoation直接處理ui操作, 那更簡(jiǎn)潔更接近Android原生處理的方式。
AQuery最優(yōu)秀的是對(duì)網(wǎng)絡(luò)請(qǐng)求的處理, 它支持異步網(wǎng)絡(luò)請(qǐng)求, 網(wǎng)絡(luò)請(qǐng)求緩存。
以上代碼自動(dòng)加載指定鏈接的圖片, 并在加載完畢后顯示在相應(yīng)的組件上。若是自己寫代碼加載圖片, 那叫一個(gè)痛苦啊。
還有更牛逼的。
//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);以上代碼, 自動(dòng)將圖片緩存在文件里, 下次再加載圖片就不用再發(fā)起網(wǎng)絡(luò)請(qǐng)求了。
更況且, 這么牛逼的組件大小只有96.5KB。
Google Cloud Message, GCM
許多人不敢用GCM,一個(gè)是擔(dān)心網(wǎng)絡(luò)被墻, 一個(gè)是擔(dān)心Google服務(wù)框架的普及度。國(guó)內(nèi)google服務(wù)確實(shí)很多被墻, 非常不穩(wěn)定。 但GCM卻是例外, 看看你的gmail的新郵件通知, 你就明白了。而對(duì)于Google服務(wù)框架在手機(jī)的普及度, 我想我們不用太擔(dān)心, 的確是很多山寨機(jī)的rom里面沒有帶著個(gè)Google服務(wù)框架, 但大部分正規(guī)廠商已經(jīng)非常重視這個(gè)問題, 像華為,中興,魅族,小米等都有內(nèi)嵌Google服務(wù)框架。另外, 并不是說沒有Google Market, Google Sync, 就不能用GCM, 在部分華為手機(jī)上就是這樣。
千萬要慎重考慮自己搭建push服務(wù)器, 這個(gè)成本, 不管是開發(fā)成本還是維護(hù)成本, 都是小的創(chuàng)業(yè)公司難以承受的。Push 服務(wù)與傳統(tǒng)的網(wǎng)頁服務(wù)器有很大的區(qū)別, 傳統(tǒng)的網(wǎng)頁服務(wù)器請(qǐng)求過程短, 連接建立, 請(qǐng)求,回復(fù),斷開連接, 沒有長(zhǎng)期與服務(wù)器建立連接,不會(huì)給服務(wù)器造成很大的壓力。而Push 服務(wù)就很不同, 技術(shù)實(shí)現(xiàn)也非常不同, 需要長(zhǎng)時(shí)間與服務(wù)器建立連接, 空閑度很高,效益比很低。
我是做國(guó)外產(chǎn)品的, 利用Google Analytics 做過簡(jiǎn)單的統(tǒng)計(jì),有近99.32%的設(shè)備是支持GCM的。
GCM做的真是不錯(cuò), 我是吃過虧的。 中國(guó)人就是貪, 什么事情都想自己做, 什么都做不好。 我們自己做過Push服務(wù), 結(jié)果 開發(fā)難度,效果和維護(hù)成本我們都很難承受;可是老板要, 我們只能硬著頭皮上, 做到后面又被迫遷移到GCM上來。
GCM的效果非常好, 只要是網(wǎng)絡(luò)有連接, 不管是你的手機(jī)怎么樣, 都可以立即通知到消息。
這個(gè)組件的配置方式很簡(jiǎn)單, 說明文檔在android開發(fā)者網(wǎng)站.
最近看了MiUI v5,發(fā)現(xiàn)這貨竟然開始不內(nèi)嵌Google Service Framework了, 既然這樣, 上面的啰嗦, 大家就視而不見了吧。
據(jù)說國(guó)內(nèi)做的比較好的是個(gè)推, 沒試過, 不知道怎么樣。
Google Analytics
谷歌分析不是必須的, 你可以選擇國(guó)內(nèi)的友盟統(tǒng)計(jì)。 友盟的統(tǒng)計(jì)會(huì)相對(duì)簡(jiǎn)單了些, 但應(yīng)該能滿足日常的需求。
再啰嗦一句, 千萬也不要自行統(tǒng)計(jì)。 不光服務(wù)器代碼要自己開發(fā), 手機(jī)端還要處理網(wǎng)絡(luò)不存在時(shí)的緩存處理。 最難的是還要自己寫腳本分析數(shù)據(jù)。 不說別的, 光一個(gè)簡(jiǎn)單的用戶地理位置分析, 估計(jì)就能搞死你。
所以, 我的同胞們, 我們的老板們, 現(xiàn)成的優(yōu)秀的組件要會(huì)用, 不要什么都自己想著自己做, 你是做產(chǎn)品的不是做統(tǒng)計(jì)的, 那是友盟的活, 你都做了人家怎么活?
greenDAO
網(wǎng)站
這是我認(rèn)為最好的Android ORM了。Android支持SQlite數(shù)據(jù)庫, 但那個(gè)數(shù)據(jù)庫操作叫一個(gè)復(fù)雜啊, 不光代碼難看, 維護(hù)起來還非常不方便。一般我都不用數(shù)據(jù)庫存儲(chǔ), 能文件就文件存儲(chǔ)了, 直到我直到了greenDAO。 這貨解決了一個(gè)大難題。
greenDAO分成兩部分, 一部分用于生成數(shù)據(jù)庫操作代碼, 一部分用于在Android工程里面提供底層支持。greenDAO對(duì)每一個(gè)表都生成相應(yīng)的對(duì)象, 在查詢,插入等操作時(shí)只需要對(duì)這個(gè)對(duì)象進(jìn)行操作就可以了。可以非常優(yōu)雅的完成數(shù)據(jù)庫操作的指令。
我知道某些服務(wù)器后端程序員,開始撅嘴了:笑話, 我們服務(wù)器后端有多少多少好的ORM, 不知道比你這個(gè)好上多少倍!?
我們是搞Android開發(fā)的好不好, android才不過五六年的時(shí)間好不好!
我們先來看看一段代碼:
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里面的數(shù)據(jù)庫查詢, 簡(jiǎn)單吧? 趕快來用用吧!
Log4j
官方網(wǎng)站
做軟件開發(fā), 沒有個(gè)日志組件是不行的。 Android原生的日志服務(wù)太簡(jiǎn)陋了, 連輸出的文件都沒有。
android-log4j配置稍微有些麻煩, 需要下載多個(gè)jar包, 包括log4j, android-log4j等。 我自己用proguard封了一個(gè)包, 用來輸出日志到文件沒有問題, 提供給大家。下載地址
final LogConfigurator lc = new LogConfigurator(); lc.setFileName(PATH_LOGGER_FILE);//日志文件路徑 lc.setFilePattern("%d - [%-6p-%c] - %m%n");//日志輸出格式 lc.setMaxBackupSize(2);//最多的文件備份個(gè)數(shù), 超過后log4j將自行刪除 lc.setMaxFileSize(1024 * 1024);//最大的日志大小, 超過后log4j將備份下來, 再新建一個(gè)文件。 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
官方網(wǎng)站
Common IO跟log4j同屬于Apache開源基金會(huì)。 主要對(duì)文件操作, 數(shù)據(jù)流操作提供了非常多簡(jiǎn)單的函數(shù)。
gson
官方網(wǎng)站
不知道大家平常與服務(wù)器端做數(shù)據(jù)通信是用什么協(xié)議的, 千萬不要自己發(fā)明啊。我見過最奇葩的通信協(xié)議是: 一個(gè)字段標(biāo)示后面數(shù)據(jù)的長(zhǎng)度, 然后拼接成字節(jié)數(shù)組作為通信協(xié)議。這種方式開發(fā)難不說, 調(diào)試起來非常不方便。 更奇葩的是, 還有人一直堅(jiān)持的這么用, 真是不思進(jìn)取啊。
我們經(jīng)常用的是json。 協(xié)議非常簡(jiǎn)單, 還是明文的, 非常容易調(diào)試。 前后端合作非常順暢。
gson的工作是把json的字符串直接轉(zhuǎn)換為java的對(duì)象, 也可以把java的對(duì)象直接轉(zhuǎn)換為字符串。 使用方式非常簡(jiǎn)單。
另外google有一個(gè)非常高效的數(shù)據(jù)協(xié)議叫protobuf,據(jù)說也很好, 不過數(shù)據(jù)沒有json明文好調(diào)試, 一直都沒有用。
最后還要吐槽下:若是網(wǎng)絡(luò)鏈接是https, 不管是url還是返回的數(shù)據(jù)都是加密傳輸?shù)?#xff0c; 不需要再什么DES加密一次了, 這是多次一舉。
轉(zhuǎn)自:http://fanxu.me/post/2013-06-06-1
總結(jié)
以上是生活随笔為你收集整理的[Android第三方类库]聊一聊Android的第三方开发组件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【聊透SpringMVC】28天肝完阿里
- 下一篇: 五笔字根表识别码图_王码86版五笔字根表