編輯:Android開發實例
1.需求
無論是在.net還是java平台,合理的分層架構是最普遍的模塊化思路之一。
dll,jar文件無不風靡盛行,無處不在。
一天,tx團隊和我說,我們現在要做android上做三個論壇的客戶端,一個是新聞論壇,一個是文學論壇,一個是音樂論壇。除了數據,界面和很少的模塊不一樣,其他的都一摸一樣。
jar是我第一刻就想到的東西,但是共用的jar文件無法方便的共享資源或者覆蓋資源。
而我們也不會傻傻的單獨做三個客戶端的吧,也不會傻傻的做3個客戶端再傻傻的copy3份,依次修改吧。
2.問題
在Android工程中如何開發一個共用Framework,能共用資源,代碼,但是也能擴展?
3.使用硬編碼判斷
有人提出了一種方案, 在代碼裡面判斷:
代碼如下:
if(新聞論壇) {
//加載新聞論壇的資源
//執行新聞論壇的代碼
//顯示新聞論壇的效果
}else if(文學論壇) {
//加載文學論壇的資源
//執行文學論壇的代碼
//顯示文學論壇的效果
}else if(音樂論壇) {
//加載音樂論壇的資源
//執行音樂論壇的代碼
//顯示音樂論壇的效果
}
PS:這是一種很無奈的辦法,代碼丑陋,擴展性差,有沒有更好的辦法呢?
4.使用Android Library分離工程
Android Library提供了一個類似於其他平台的庫的概念,這個庫不僅能公用代碼,還能共用資源,還能覆寫資源。
Android Library是以工程的顆粒來復用,引用它的工程,其實就是引用它的代碼,然後生成R.java和主工程需要的資源,而剔除Library中被覆蓋的資源。其中Library中的AndroidManifest.xml不能復用,也就是說主工程必須重新定義AndroidManifest.xml,這個也很容易理解,AndroidManifest.xml本來就是工程的一個配置文件,一般來說不具備共用的庫的通用性。
步驟如下:
第一步:新建Android工程common。
第二步:右鍵common,選擇Properties,在Android標簽頁,選中"Is Library" ,如下圖。
第三步: 新建主工程新聞論壇tianxianews。
第四步: 右鍵tianxianews,選擇Properties,在Android標簽頁,點擊Add,選中common。如下圖。
查看最後的工程結構:
此時此刻,common工程天衣無縫成了tianxianews工程的一部分。
我們展開tianxianews工程的gen目錄:
eclipse為了生成了兩個R.java,一個是common工程的,一個tianxianews工程的,但是內容是一摸一樣的,這樣做的好處是:R.java裡面的內容包括兩個工程資源,第一,tianxianews工程通過R.java能調用到common工程的資源;第二,如果有覆寫的資源,生成apk的時候,tianxianews工程覆蓋common工程的資源,因為兩個R.java內容一樣,common代碼調用的R.java中的資源,實際上調用的是tianxianews資源,這個特性類似如面向對象的繼承的概念。
我們還可以另外新建tianxiamusic,tianxialiterature工程,都引用common,這樣我們三個工程就能共用common,這樣我們就可以只在common一個工程中開發了。
在這裡,具體的使用步驟我沒有截圖出來,主要是沒什麼技術,也沒什麼好說的,就是兩個字:覆蓋。
5.小結
Android Library為Android模塊化和工程擴展提供了一個很好的工具或者方式。隨著項目的增大,資源的共享,模塊化和擴展的這種需求更是日益凸顯,它不僅去掉了代碼的丑陋,而且減少了開發量,帶來的益處不少。同時由此我們也可以看出來Android的不成熟,他們為我們大型工程提供的方案還是太少,這可能也有源自手機平台本身的局限性吧,我們期待Android市場走向更強大,技術走向更強悍。
可以顯示在的Android任務,通過加載進度條的進展。進度條有兩種形狀。加載欄和加載微調(spinner)。在本章中,我們將討論微調(spinner)。Spinner 用
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個
Android 調用自帶的錄制音頻程序 Android中有自帶的音頻錄制程序,我們可以通過指定一個Action MediaStore.Audio.Media.RE