AsyncQueryHandler 介紹

轉:http://xwangly.iteye.com/blog/1098728

每天進步一點點之AsyncQueryHandler學習

AsyncQueryHandler:異步的查詢操作幫助類,其實它同樣可以處理增刪改

1。AsyncQueryHandler的作用

查詢其API便可知,它擔供:

startInsert

startDelete

startUpdate

startQuery

這四個操作,並提供相對應的onXXXComplete方法,以供操作完數據庫後進行其它的操作,這四個onXXXComplete方法都是空實現,以便我們只需要去實現我們關注的操作。

 

2。爲什麼要使用AsyncQueryHandler

當然你也可以使用ContentProvider去操作數據庫。

這在數據量很小的時候是沒有問題的,但是如果數據量大了,可能導致UI線程發生ANR事件。

當然你也可以寫個Handler去做這些操作,只是你每次使用ContentProvider時都要再寫個Handler,必然降低了效率。

因此API提供了一個操作數據庫的通用方法。

 

3。如何使用AsyncQueryHandler

你只需要繼承AsyncQueryHandler類,並提供onXXXComplete方法的實現(可以實現任何一個或多個,當然你也可以一個也不實現,如果你不關注操作數據庫的結果),在你的實現中做一些對數據庫操作完成的處理。

使用時直接調用startXXX方法即可。傳入的通用參數如下:

int token,一個令牌,需要跟onXXXComplete方法傳入的一致。(當然你也可以不一致,同樣在數據庫的操作結束後會調用對應的onXXXComplete方法 )

Object cookie,你想傳給onXXXComplete方法使用的一個對象。(沒有的話傳遞null即可。基本發現這個變量沒太大作用)

Uri uri,(不解釋)

 

4。AsyncQueryHandler還爲我們做了什麼

AsyncQueryHandler中使用了一個WeakReference<ContentResolver>對象,即ContentResolver的弱引用  作用:當contentProvied發生變化時候同步更新仍可以通過使用AsyncQueryHandler類來達到這一要求(暫時還沒理解這個作用)

同時,在它執行操作數據庫時,吃掉了所有的異常。見如下代碼。

 catch (Exception e) {
                        Log.w(TAG, e.toString());
                        cursor = null;
                    }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章