編輯:關於Android編程
Droid-Fu 是一個通用的Android應用庫
Droid-Fu 的主要目的是使得Android開發更加容易
Droid-Fu 是開源的
Droid-Fu 包含了許多工具類,還有非常易用的Android組件,所有這些對於Android應用來說都是非常有用的。Droid-Fu在以下領域提供了支持:
Android應用的生命周期
後台任務
Http消息處理
遠程圖片處理
定制的各種Adapter
基礎知識
Droid-Fu 的最大優勢是他提的應用生命周期幫助類。如果你正在開發一款Android應用,而它的主要任務是運行後台任務,例如從web上抓取數據,你肯定會在你的應用中使用Droid-Fu。
討厭的AsyncTask
關於此話題,我已在兩篇文章討論過。第三次,我終於找到了優雅的解決辦法。我們先來看看AsyncTask的問題吧:第一,AsyncTask是什麼?它是一個執行大開銷操作的幫助類。如果你正在開發一個需要訪問web服務端的手機應用,很可能你已經使用過它了。
其基本思路是:發起一個異步任務,當任務線程執行過程中,顯示一個漂亮的進度框,當任務將結果返回到Activity時進度框關閉。酷,但是如果用戶決定旋轉屏幕,可異步任務還在運行怎麼辦(屏幕旋轉當前的Activity會完成整個一輪生命周期。然後重新創建,回調onCreate()方法。)?或是一個電話打進來,打斷應用,Android決定將該應用進程殺死怎麼辦?這兩種動作都會中斷activity,當下次繼續使用該應用時會recreate該Activity。很不幸,AsyncTask仍舊在運行,並且保留一個指針指向老的Activity,因為重啟的Activity在內存中式完全不同的一個對象(並且還會執行Activity的onCreate(),就好像Activity是第一次啟動一樣)。我不確定AsyncTask是否還會將結果返回給老的Activity對象(如果是弱引用,可能它已經被回收),但是無論如何,新的Activity不會接收到該數據,因為完全是一個新的Activity實例。
現在,人們可以說:好的,就再做一次同樣的工作,重新發送請求。是的,你可以這樣做。但這是浪費,真的,讓你覺得自己愚蠢,不是嗎?另外,如果用戶觸發一個Web服務請求,然後翻轉屏幕,發現不是自己想要的,又翻轉回來,那麼你的請求被發送平行的3倍。難道這就是你想要什麼?大概不會。
BetterAsyncTask來救援
還好有Droid-Fu,他為我們提供了一個解決方案:BetterAsyncTask! (我是個懶惰的人,我不能拿出一個更好的名稱了)。它的行為完全一樣AsyncTask(事實上,這是一個AsyncTask),但它為你做一些額外的工作:首先,它會記錄當前活動的實例,如果該實例改變,將發布的數據返回到新的實例。換句話說,你可以派遣你的任務,並且隨意的來回翻轉屏幕,BetterAsyncTask仍然會將任務的結果返回給當前的活動實例。換句話說,任務永遠只運行一次。
有一個問題,由於BetterAsyncTask沒有辦法找出哪一個是其當前活動的實例,它依賴於一個助手:DroidFuApplication。這個類是Application的子類,如果你想使用BetterAsyncTask,你的應用程序從該類派生的,否則它不會工作。這是因為DroidFuApplication保留了活動實例的弱映射,當一個BetterAsyncTask完成後,它會通過您的Application獲取Activity實例。
你所需做的僅僅是發起一個任務:
public class MyActivity extends BetterDefaultActivity {
protected void onResume() {
super.onResume();
if (isLaunching()) { // this is explained further down this article
MyBetterAsyncTask task = new MyBetterAsyncTask(this);
task.execute(someData);
}
}
}
此外,BetterAsyncTask在運行期還會自動打開和關閉對話框,雖然你進步的運行,或觸發活動標題欄的進度條。它還可以讓你的任務在執行過程中拋出異常,然後再發布到你的錯誤處理handle。
BetterActivity 和 BetterService
Droid-Fu為活動和服務提供一些簡單但非常有用的輔助基類。目前,只有BetterDefaultActivity,BetterListActivity和BetterService,但我打算實現Better*系列Android活動基類(如MapActivity等)。
你將在以下方面獲得幫助
生命周期幫助類
這些方法讓你根據上下文的生命周期狀態來決定完成具體什麼工作。
isLaunching() :當且僅當Activity或Service第一次執行onCreate時為true
isRestoring() :當Activity或Service在被Android殺死後重新恢復時為true
isResuming() :當Activity或Service執行onResume之前並沒有執行onCreate時為true
isApplicationBroughtToBackground(): 有時是必要區分您的活動正由你自己的應用程序活動暫停,或由一個完全不同的應用暫停。這種方法可以得到真實的,如果由另一個應用程序暫停你的活動,那麼返回true
Dialog幫助類
BetterActivity提供了如下的幫助方法讓你輕松顯示Dialog
showInfoDialog(): 顯示了一個帶有通知圖標的警告對話框
showAlertDialog(): 顯示了一個帶有警告圖標的警告對話框
showErrorDialog(): 和showAlertDialog一樣,只是多了一個參數顯示異常信息
showListDialog(): 顯示了一個列表對話框,當點擊一個條目,它會回調處理程序
所有的這些Dialog都是可以定制化的 (e.g. message or icon).
請尊重他人的勞動成果,轉載請注明出處:Android開發之解析XML並實現三級聯動效果 本實例主要應用XmlPullParser解析XML文檔中的省市區,然
先看效果: 現在很多的應用效果都需要做的炫些,像UC,以及天天靜聽,效果很炫的,源碼已經對外開放了,有興趣的可以去研究下的 上源碼main.xml&l
最近幾個項目的測試結果,Android無法主動通過調用 webview.loadUrl(javascript:+callbackFunction+(+data+)); 這
近期要做一個含有兩個tab切換頁面,兩個頁面有公共的描述信息區域,兩個tab都是listview,可以向上或向下拉動刷新,在頁面中部有一個tab切換區域,向上滑動的時候t