Android Loader詳解二:使用加載器

上一篇:/kf/201202/118919.html

一個使用裝載器的應用會典型的包含如下組件:

一個Activity或Fragment.

一個LoaderManager的實例.

一個加載被ContentProvider所支持的數據的CursorLoader.或者,你可以從Loader或AsyncTaskLoader實現你自己的裝載器來從其它源加載數據.

一個LoaderManager.LoaderCallbacks的實現.這是你創建新的裝載器以及管理你的已有裝載器的引用的地方.

一個顯示裝載器的數據的途徑,例如使用一個SimpleCursorAdapter.

一個數據源,比如當是用CursorLoader時,它將是一個ContentProvider.

啟動一個裝載器
LoaderManager管理一個Activiry或Fragment中的一個或多個裝載器.但每個activity或fragment隻擁有一個LoaderManager.

你通常要在activity的onCreate()方法中或fragment的onActivityCreated()方法中初始化一個裝載器.你可以如下創建:

[java] // 準備裝載器.可以重連一個已經存在的也可以啟動一個新的.  
getLoaderManager().initLoader(0,null, this); 
// 準備裝載器.可以重連一個已經存在的也可以啟動一個新的.
getLoaderManager().initLoader(0,null, this);
initLoader()方法有以下參數:

一個唯一ID來標志裝載器.在這個例子中,ID是0.

可選的參數,用於裝載器初始化時(本例中是null).

一個LoaderManager.LoaderCallbacks的實現.被LoaderManager調用以報告裝載器的事件,在這個例子中,類本實現瞭這個接口,所以傳的是它自己:this.

initLoader()保證一個裝載器被初始化並激活.它具有兩種可能的結果:

如果ID所指的裝載器已經存在,那麼這個裝載器將被重用.

如果裝載器不存在,initLoader()就觸發LoaderManager.LoaderCallbacks的方法onCreateLoader().這是你實例化並返回一個新裝載器的地方.

 

在這兩種情況中,傳入的LoaderManager.LoaderCallbacks的實現都與裝載器綁定在一起.並且會在裝載器狀態變化時被調用.如果在調用這個方法時,調用者正處於啟動狀態,並且所請求的裝載器已存在並產生瞭數據,那麼系統會馬上調用onLoadFinished()(也就是說在initLoader()還在執行時).所以你必須為這種情況的發生做好準備.

註意initLoader()返回所創建的裝載器,但是你不需保存一個對它的引用.LoaderManager自動管理裝載器的生命.LoaderManager會在需要時開始和停止裝載動作,並且維護裝載器的狀態和它所關聯的內容.這意味著,你很少與裝載器直接交互.你通常都是使用LoaderManager.LoaderCallbacks的方法們在某個事件發生時介入到數據加載的過程中.

 

摘自 nkmnkm的專欄

發佈留言