AsyncQueryHandler了解
轉(zhuǎn)載地址:http://www.krislq.com/2013/02/android_class_asyncqueryhandler/#more-596
摘要:
本文主要是從下面的幾個方面去介紹AsyncQueryHandler。
1. AsyncQueryHandler介紹
2. 為什么需要 AsyncQueryHandler
3. 如何使用AsyncQueryHandler
?
1. AsyncQueryHandler介紹:
AsyncQueryHandler顧名思義就是異步查詢幫助類,它是Handler的子類。我們在處理與ContentProvider相關(guān)內(nèi)容的時候,可以使用此類來完成一些異步的操作。
AsyncQueryHandler類上為我們提供了以下接口:
startInsert
startDelete
startUpdate
startQuery
這四個操作,并提供相對應(yīng)的onXXXComplete方法,以供操作完數(shù)據(jù)庫后進行其它的操作,這四個 onXXXComplete方法都是空實現(xiàn),所以我們可以覆寫此類方法來完成我們的后續(xù)操作。
2. 為什么需要 AsyncQueryHandler
當(dāng)然你也可以使用ContentProvider去操作數(shù)據(jù)庫。這在數(shù)據(jù)量很小的時候是沒有問題的,但是如果數(shù)據(jù)量大了,可能導(dǎo)致UI線程發(fā)生ANR事件。
當(dāng)然你也可以寫個Handler去做這些操作,只是你每次使用ContentProvider時都要再寫個Handler,必然降低了效率。
因此API提供了一個操作數(shù)據(jù)庫的通用方法。
3. 如何使用AsyncQueryHandler
首先我們需要繼承AsyncQueryHandler,并且提供onXXXComplete的實現(xiàn)方法(如果我們不關(guān)心操作數(shù)據(jù)庫的結(jié)果,我們也可以不用實現(xiàn)),用于實現(xiàn)數(shù)據(jù)庫操作完成的操作。
然后,在我們需要使用的地方直接使用startXXX方法即可。傳入的通用參數(shù)有:
int token ,一個標識符。與onXXXComplete中返回的是一致的。當(dāng)我們需要同時查詢多次時,可以通過 token來標識每個查詢。
Object cookie,你想傳給onXXXComplete方法使用的一個對象。不想傳,可以為null
Uri uri,不解釋了
?
下面再帖一段簡單的用法:
?
1 protected void onResume() { 2 super.onResume(); 3 Uri uri = Uri.parse("content://com.android.contacts/data/phones"); 4 String[] projection = { "_id", "display_name", "data1", "sort_key" }; 5 asyncQuery.startQuery(0, null, uri, projection, null, null, 6 "sort_key COLLATE LOCALIZED asc"); 7 } 8 9 //查詢聯(lián)系人 10 private class MyAsyncQueryHandler extends AsyncQueryHandler { 11 12 public MyAsyncQueryHandler(ContentResolver cr) { 13 super(cr); 14 } 15 16 @Override 17 protected void onQueryComplete(int token, Object cookie, Cursor cursor) { 18 //TODO something 19 } 20 }?
轉(zhuǎn)載于:https://www.cnblogs.com/androidxiaoyang/archive/2013/02/19/2916555.html
總結(jié)
以上是生活随笔為你收集整理的AsyncQueryHandler了解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大话网站---从Hello World到
- 下一篇: VS 2010 Beta2中WPF与Si