日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android官方开发文档Training系列课程中文版:后台加载数据之使用CursorLoader进行查询

發(fā)布時間:2024/7/5 Android 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android官方开发文档Training系列课程中文版:后台加载数据之使用CursorLoader进行查询 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

原文地址:http://android.xsoftlab.net/training/load-data-background/index.html

引言

在ContentProvider中查詢數(shù)據(jù)是需要花點時間的。如果你直接在Activity進行查詢,那么這可能會導致UI線程阻塞,并會引起”Application Not Responding”異常。就算不會發(fā)生這些事情,那么用戶也能感覺到卡頓,這會非常惱人的。為了避免這樣的問題,應該將查詢的工作放在單獨的線程中執(zhí)行,然后等待它執(zhí)行完畢后將結(jié)果顯示出來。

你可以使用一個異步查詢對象在后臺查詢,然后等查詢結(jié)束之后再與Activity建立連接。這個對象就是我們要說的CursorLoader。CursorLoader除了可以進行基本查詢之外,還可以在數(shù)據(jù)發(fā)生變化后自動的重新進行查詢。

這節(jié)課主要會學習如何使用CursorLoader在后臺進行查詢。

使用CursorLoader進行查詢

CursorLoader對象在后臺運行著一個異步查詢,當查詢結(jié)束之后會將結(jié)果返回到Activity或FragmentActivity。這使得查詢在進行的過程中Activity或FragmentActivity還可以繼續(xù)與用戶交互。

定義使用CursorLoader的Activity

如果要在Activity中使用CursorLoader,需要用到LoaderCallbacks接口。CursorLoader會調(diào)用該接口中的方法,從而使得與Activity產(chǎn)生交互。這節(jié)課與下節(jié)課都會詳細描述該接口中的回調(diào)。

舉個例子,下面的代碼演示了如何定義一個使用了CursorLoader的FragmentActivity。通過繼承FragmentActivity,你可以獲得CursorLoader對Fragment的支持:

public class PhotoThumbnailFragment extends FragmentActivity implementsLoaderManager.LoaderCallbacks<Cursor> { ... }

初始化查詢

使用LoaderManager.initLoader()可以初始化查詢。它其實初始化了后臺查詢框架。可以將初始化這部分工作放在用戶輸入了需要查詢的數(shù)據(jù)之后,或者如果不需要用戶輸入數(shù)據(jù),那么也可以將這部分工作放在onCreate()或onCreateView()中執(zhí)行:

// Identifies a particular Loader being used in this componentprivate static final int URL_LOADER = 0;.../* When the system is ready for the Fragment to appear, this displays* the Fragment's View*/public View onCreateView(LayoutInflater inflater,ViewGroup viewGroup,Bundle bundle) {.../** Initializes the CursorLoader. The URL_LOADER value is eventually passed* to onCreateLoader().*/getLoaderManager().initLoader(URL_LOADER, null, this);...}

Note: getLoaderManager()方法只對Fragment類可用。如果需要在FragmentActivity中獲得LoaderManager,調(diào)用getSupportLoaderManager()方法即可。

開始查詢

后臺查詢框架的初始化一旦完成,緊接著你所實現(xiàn)的onCreateLoader()就會被調(diào)用。如果要啟動查詢,需要在該方法內(nèi)返回一個CursorLoader對象。你可以實例化一個空的CursorLoader,然后再使用它的方法定義查詢,或者你也可以在實例化CursorLoader的時候定義查詢。

/* * Callback that's invoked when the system has initialized the Loader and * is ready to start the query. This usually happens when initLoader() is * called. The loaderID argument contains the ID value passed to the * initLoader() call. */ @Override public Loader<Cursor> onCreateLoader(int loaderID, Bundle bundle) {/** Takes action based on the ID of the Loader that's being created*/switch (loaderID) {case URL_LOADER:// Returns a new CursorLoaderreturn new CursorLoader(getActivity(), // Parent activity contextmDataUrl, // Table to querymProjection, // Projection to returnnull, // No selection clausenull, // No selection argumentsnull // Default sort order);default:// An invalid id was passed inreturn null;} }

一旦后臺查詢框架獲得了該對象,那么它會馬上在后臺開始查詢。當查詢結(jié)果完成,后臺查詢框架會調(diào)用onLoadFinished(),該方法的具體內(nèi)容會在下節(jié)課說明。

總結(jié)

以上是生活随笔為你收集整理的Android官方开发文档Training系列课程中文版:后台加载数据之使用CursorLoader进行查询的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。