android 3.0 sdk,引入了很多新api,比如loader。和fragment類似(編寫相容android1.6的fragment),該api也可在android 1.6以上版本執行。
以下介紹如何編寫loader,實現對listview的非同步載入。效果如圖:
示例中有乙個後台執行緒每隔3秒更新資料庫的長江記錄,將記錄改為「長江」或「long river」。listview無需監控資料庫變化,基於loader,會自動更新。實際上這裡面是觀察者模式,無非是系統自帶了,只需呼叫即可,無需自己構造觀察者。
這個示例也是完整的sqlite+content provider+cursor adapter+listview+loader組合示例。
編寫前的準備類似編寫相容android1.6的fragment,需要匯入jar包。
另外,2.3以前的activity類沒有提供一些loader的幫助方法,需要讓自己的activity實現類繼承fragmentactivity:
public本示例是在在檢視顯示中使用theme基礎上實現的。class listviewactivity extends
fragmentactivity
activity類和rivercontentprovider類做了修改。
activity類:
public主要是增加了initloader方法。這裡主要是實現了loadercallbacks介面。其中:class listviewactivity extends
fragmentactivity
private
void
initloader() ,
null, null, null
); //
cursorloader.setupdatethrottle(1000);
return
cursorloader; }
@override
public
void onloadfinished(loaderloader,
cursor cursor)
@override
public
void onloaderreset(loaderloader)
}); }
private
void
setriverlistviewadapter() ,
newint
, cursoradapter.flag_register_content_observer);
riverlistview.setadapter(adapter);
}
oncreateloader,在建立activity時跟著oncreate會呼叫一次
onloadfinished,每次改變和loader相關的資料庫記錄後會呼叫一次
onloaderreset,在關閉activity時呼叫,釋放資源
然後,在content provider中,要呼叫類似觀察者模式中通知的方法,即,在update方法中通知觀察者記錄改變,在query方法中註冊觀察者,這樣通知來了可接收並處理。
update方法:
@overridequery方法:public
intupdate(uri uri, contentvalues values, string selection, string selectionargs)
publiccursor query(uri uri, string projection, string selection, string selectionargs, string sortorder)
Android 使用Loader示例
android 3.0 sdk,引入了很多新api,比如loader。和fragment類似 編寫相容android1.6的fragment 該api也可在android 1.6以上版本執行。以下介紹如何編寫loader,實現對listview的非同步載入。效果如圖 示例中有乙個後台執行緒每隔3秒更...
Android 使用Loader示例
android 3.0 sdk,引入了很多新api,比如loader。和fragment類似 編寫相容android1.6的fragment 該api也可在android 1.6以上版本執行。以下介紹如何編寫loader,實現對listview的非同步載入。效果如圖 示例中有乙個後台執行緒每隔3秒更...
Loader技術原理
loader是實現fusioninsight hd與關係型資料庫 檔案系統之間互動資料和檔案的資料載入工具。基於開源sqoop研發,做了大量優化和擴充套件。提供視覺化嚮導式的作業配置管理介面 提供定時排程任務,週期性執行loader作業 在介面中可指定多種不同的資料來源 配置資料的清洗和轉換步驟 配...