Android中-Loader載入器

小小時光機發表於2017-04-30

Loader載入器:

Android3.0(API11推出的),用來進行非同步資料的載入,內部使用AsyncTask實現,通常用在資料庫的載入,隨後V4中推出了相容的版本
核心

  • LoaderManger
  • LoaderManger.LoaderCallBacks
  • Loader

Loader

  • 載入器的基類
  • AsyncTaskLoader是Loader的一個子類,內部使用AsyncTask處理耗時操作
  • CursorLoader是AsyncTaskLoader的一個子類,主要用來載入ContentProvider中的資料

LoaderManger

  • 載入器的管理者
  • 主要負責Loader的回撥管理,一個Activity或者Fragment中只有一個LoaderManger,一個LoaderManger可以管理多個Loader
  • LoaderManger在初始化的時候,通過id去確定Loader,如果Loader不存在,那麼將建立一個新的Loader,如果已經存在,將重新連線已經存在的Loader

LoaderManger.LoaderCallBacks

  • 載入器載入狀態的回撥函式
  • onCreatLoader當Loader不存在時,我們呼叫初始化Loader時,需要返回一個Loader物件
  • onLoadFinished 當Loader執行完非同步任務,獲取到資料之後的一個回撥,將資料返回來
  • onLoaderReset 當Loader被重置時的呼叫,我們需要在這個回撥中做資源的釋放

AsyncTaskLoader

  • 需要重寫loadInBackground,這個方法在後臺執行緒執行,處理耗時操作
  • 我們需要在onStartLoading方法中主動呼叫forceLoade()方法強制進行資料的載入

下面通過一個栗子來解釋

這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
Finish的時候處理資料物件Cursor

這裡可以實現一個聯絡人的模糊查詢
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

在onLoadFinish的時候將Cursor物件的資料設定到Adapter上
adapter.swapCursor(data);

在onLoaderReset的時候,將資料置空
adapter.swapCursor(null);


自定義的CustomLoader extends AsyncTaskLoader

這裡寫圖片描述

相關文章