AsyncQueryHandler的使用
每天進步一點點之AsyncQueryHandler學習
AsyncQueryHandler:異步的查詢操作幫助類,其實它同樣可以處理增刪改
1。AsyncQueryHandler的作用
查詢其API便可知,它擔供:
這四個操作,並提供相對應的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;
}
最後更新:2017-04-03 20:19:27