Android 非同步查詢方塊架AsyncQueryHandler的使用

來源:互聯網
上載者:User

AsyncQueryHandler簡介:

非同步查詢操作協助類,可以處理增刪改(ContentProvider提供的資料)


使用情境:

在一般的應用中可以使用ContentProvider去操作資料庫。

這在資料量很小的時候是沒有問題的,但是如果資料量大了,可能導致UI線程發生ANR異常(超過5秒)。

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

因此當資料量較大時,最好還是使用Android已經封裝好的非同步查詢方塊架AsyncQueryHandler,最佳化我們的代碼.

要注意的是,一般在查詢本地的應用的資料的時候要去採用CursorAdapter

AsyncQueryHandler內部實現

AsyncQueryHandler類封裝了調用者線程與背景工作執行緒的互動過程。互動的主體是兩個Handler,一個運行在調用者線程中,一個運行在工作者線程中。通過提供onXXXComplete的回調介面,實現事件的完成處理。


API中提供

startInsert,

startDelete,

startUpdate,

startQuery四種方法,並有響應的onXXXComplete()方法.於對應的4個onXXXComplete()方法都是空實現,因此我們完成相應調用後進行後續其他的操作. 


使用方法

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

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

token,一個令牌,主要用來標識查詢,保證唯一即可.需要跟onXXXComplete方法傳入的一致。(當然你也可以不一致,同樣在資料庫的操作結束後會調用對應的onXXXComplete方法 )

cookie,你想傳給onXXXComplete方法使用的一個對象。(沒有的話傳遞null即可)

Uri uri(進行查詢的通用資源標誌符):

projection 查詢的列 

selection  限制條件 

selectionArgs 查詢參數

orderBy 排序條件

private void startQuery() {        Uri uri = Sms.CONVESATION_URI;        mQueryHandler.startQuery(0, null, uri, CONVERSATION_PROJECTION, null, null, "sms.date desc");    }    // 寫一個非同步查詢類    private final class QueryHandler extends AsyncQueryHandler {        public QueryHandler(ContentResolver cr) {            super(cr);        }         @Override        protected void onQueryComplete(int token, Object cookie, Cursor cursor) {            super.onQueryComplete(token, cookie, cursor);            // 更新mAdapter的Cursor            mAdapter.changeCursor(cursor);        }    }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.