天天看點

[Android Pro] Android異步任務處理之AsyncTaskLoader的使用

最近項目中涉及到加載本地的地名.db檔案,資料量大,自然不能直接放在UI線程中操作,好在Google在Android3.0以後,提供了AsyncTaskLoader來做一些耗時的異步任務。

1、They are available to every Activity and Fragment. 

//支援Activity和Fragment 

2、They provide asynchronous loading of data. 

//異步下載下傳 (就是不影響UI線程) 

3、They monitor the source of their data and deliver new results when the content changes. 

//當資料源改變時能及時通知用戶端 

4、They automatically reconnect to the last loader’s cursor when being recreated after a configuration change. Thus, they don’t need to re-query their data. 

//發生configuration change時自動重連接配接

下面引用官方的一個展示目前裝置所有已安裝應用程式的DEMO,來對AsyncTaskLoader的用法做一個詳細的介紹: 

項目結構如圖:

[Android Pro] Android異步任務處理之AsyncTaskLoader的使用

第一步:我們需要寫一個對應于每一個應用程式的實體類,該實體類包含應用程式圖示和标簽兩個屬性。 

AppEntry.java:

[Android Pro] Android異步任務處理之AsyncTaskLoader的使用
[Android Pro] Android異步任務處理之AsyncTaskLoader的使用

第二步:需要寫一個自己的AppListLoader ,繼承自AsyncTaskLoader,并實作其相關抽象方法。

(1)onStartLoading:注冊一些監聽器到loader上,并且執行一次forceLoad(); 否則loader不會開始工作 

(2)loadInBackground:不用說,在這裡就是加載資料并且傳回,其實這個資料就傳回到了LoaderManager的onLoadFinished方法第二個參數 

(3)onStopLoading:停止加載資料,但不要停止監聽也不要釋放資料,就可以随時重新開機loader 

(4)onReset:先確定已經停止加載資料了,然後釋放掉監聽器并設為null 

(5)onCanceled: 在這裡可以釋放資源,如果是list就不需要做什麼了,但是象cursor或者打開了什麼檔案就應該關閉一下;

AppListLoader .java:

[Android Pro] Android異步任務處理之AsyncTaskLoader的使用
[Android Pro] Android異步任務處理之AsyncTaskLoader的使用

第三步:在MainActivity中調用AsyncTaskLoader,并繼承LoaderManager.LoaderCallbacks的接口,重寫接口方法:

(1)onCreateLoader: 這個是建立一個AsyncTaskLoader并傳回,我們在裡面new一個自己寫的AppListLoader并傳回就OK了; 

(2)onLoadFinished: 這個是加載完成後可以更新UI,在這裡就是setAdapter了 而這個加載過程其實就是在CursorLoader裡面完成的, 

隻不過系統幫我們完成了,而如果自定義loader的話就要自己完成,這就是差別; 

(3)onLoaderReset: loader的重置,在這裡一般讓UI不顯示資料就行;

MainActivity .java:

[Android Pro] Android異步任務處理之AsyncTaskLoader的使用
[Android Pro] Android異步任務處理之AsyncTaskLoader的使用

然後運作程式如下:

[Android Pro] Android異步任務處理之AsyncTaskLoader的使用

打開應用,AppListLoader中核心方法執行的先後順序:

[Android Pro] Android異步任務處理之AsyncTaskLoader的使用
[Android Pro] Android異步任務處理之AsyncTaskLoader的使用

傳回鍵,會執行的方法及執行順序:

本項目的學習之後,我們應該掌握以下幾點: 

(1)了解AsyncTaskLoader的每一個核心方法的作用及調用時機,以及如何自定義一個AsyncTaskLoader。 

(2)如何在Fragement中啟動AsyncTaskLoader,繼承LoaderManager.LoaderCallbacks,實作接口的三個方法。 

(3)應該了解AsyncTaskLoader的底層實際上是執行的AsyncTask,這個可以看看源碼。 

(4)如何應用ApplicationInfo,擷取相關的程式資訊。

本文轉自demoblog部落格園部落格,原文連結http://www.cnblogs.com/0616--ataozhijia/p/6204357.html如需轉載請自行聯系原作者

demoblog

繼續閱讀