編輯:關於Android編程
一,Android裝載器基本方法
裝載器從android3.0開始引進。它使得在activity或fragment中異步加載數據變得簡單。裝載器具有如下特性:
裝載器API概述
在使用裝載器時,會涉及很多類和接口們,我們在下表中對它們總結一下:
Class/Interface
說明
LoaderManager
一個抽像類,關聯到一個Activity或Fragment,管理一個或多個裝載器的實例。這幫助一個應用管理那些與Activity或Fragment的生命周期相關的長時間運行的的操作。最常見的方式是與一個CursorLoader一起使用,然而應用是可以隨便寫它們自己的裝載器以加載其它類型的數據。
每個activity或fragment只有一個LoaderManager。但是一個LoaderManager可以擁有多個裝載器。
LoaderManager.LoaderCallbacks
一個用於客戶端與LoaderManager交互的回調接口。例如,你使用回調方法onCreateLoader()來創建一個新的裝載器。
Loader(裝載器)
一個執行異步數據加載的抽象類。它是加載器的基類。你可以使用典型的CursorLoader,但是你也可以實現你自己的子類。一旦裝載器被激活,它們將監視它們的數據源並且在數據改變時發送新的結果。
AsyncTaskLoader
提供一個AsyncTask來執行異步加載工作的抽象類。
CursorLoader
AsyncTaskLoader的子類,它查詢ContentResolver然後返回一個Cursor。這個類為查詢cursor以標准的方式實現了裝載器的協議,它的游標查詢是通過AsyncTaskLoader在後台線程中執行,從而不會阻塞界面。使用這個裝載器是從一個ContentProvider異步加載數據的最好方式。相比之下,通過fragment或activity的API來執行一個被管理的查詢就不行了。
二,啟動一個裝載器
LoaderManager管理一個Activiry或Fragment中的一個或多個裝載器.但每個activity或fragment只擁有一個LoaderManager.
你通常要在activity的onCreate()方法中或fragment的onActivityCreated()方法中初始化一個裝載器.你可以如下創建:
// 准備裝載器.可以重連一個已經存在的也可以啟動一個新的. getLoaderManager().initLoader(0,null, this);
initLoader()方法有以下參數:
initLoader()保證一個裝載器被初始化並激活.它具有兩種可能的結果:
在這兩種情況中,傳入的LoaderManager.LoaderCallbacks的實現都與裝載器綁定在一起.並且會在裝載器狀態變化時被調用.如果在調用這個方法時,調用者正處於啟動狀態,並且所請求的裝載器已存在並產生了數據,那麼系統會馬上調用onLoadFinished()(也就是說在initLoader()還在執行時).所以你必須為這種情況的發生做好准備.
注意initLoader()返回所創建的裝載器,但是你不需保存一個對它的引用.LoaderManager自動管理裝載器的生命.LoaderManager會在需要時開始和停止裝載動作,並且維護裝載器的狀態和它所關聯的內容.這意味著,你很少與裝載器直接交互.你通常都是使用LoaderManager.LoaderCallbacks的方法們在某個事件發生時介入到數據加載的過程中.
三,重啟裝載器
當你使用initLoader()時,如果指定ID的裝載器已經存在,則它使用這個裝載器.如果不存在呢,它將創建一個新的.但是有時你卻是想丟棄舊的然後開始新的數據.
要想丟棄舊數據,你應使用restartLoader().例如,下面這個SearchView.OnQueryTextListener的實現在用戶查詢發生改變時重啟了裝載器,裝載器於是需重啟從而能使用新的搜索過慮來進行一次新的查詢.
<pre name="code" class="html">public boolean onQueryTextChanged(String newText) { // 當動作欄的搜索字串發生改時被調用. // 更新搜索過慮,然後重新啟動裝載利用這個新過慮進行新的查詢. mCurFilter = !TextUtils.isEmpty(newText) ? newText : null; getLoaderManager().restartLoader(0, null, this); return true; } <span >LoaderManager.LoaderCallbacks是一個回調接口,它使得客戶端可以與LoaderManager進行交互.</span>
裝載器,一般指的是CursorLoader,我們希望在它停止後依然保持數據.這使得應用可以在activity或fragment的 onStop() 和onStart() 之間保持數據,所以當用戶回到一個應用時,它們不需等待數據加載.你使用LoaderManager.LoaderCallbacks 的方法們,在需要時創建新的裝載器,並且告訴應用什麼時候要停止使用裝載器的數據.
</span></span> LoaderManager.LoaderCallbacks 包含以下方法們: onCreateLoader() —跟據傳入的ID,初始化並返回一個新的裝載器. onLoadFinished() —當一個裝載器完成了它的裝載過程後被調用. onLoaderReset() —當一個裝載器被重置而什其數據無效時被調用.
當你試圖去操作一個裝載器時(比如,通過initLoader()),會檢查是否指定ID的裝載器已經存在.如果它不存在,將會觸發LoaderManager.LoaderCallbacks 的方法onCreateLoader().這是你創建一個新裝載器的地方.通常這個裝載器是一個CursorLoader,但是你也可以實現你自己的裝載器.
String mCurFilter; ... public Loader<Cursor> onCreateLoader(int id, Bundle args) { // 這裡是在需要創建新裝載器時被調用的. // 我們只是簡單的擁有一個裝載器,所以我們不需要關心ID. // First, pick the base URI to use depending on whether we are // currently filtering. Uri baseUri; if (mCurFilter != null) { baseUri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI, Uri.encode(mCurFilter)); } else { baseUri = Contacts.CONTENT_URI; } // Now create and return a CursorLoader that will take care of // creating a Cursor for the data being displayed. String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND (" + Contacts.HAS_PHONE_NUMBER + "=1) AND (" + Contacts.DISPLAY_NAME + " != '' ))"; return new CursorLoader(getActivity(), baseUri, CONTACTS_SUMMARY_PROJECTION, select, null, Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"); }
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
前言前面兩篇博客分別介紹了Android進程間通信之AIDL的使用,以及使用AIDL傳遞復雜對象以及Bitmap對象。所謂AIDL:Android Interface D
先借助Android studio工具新建一個新的空項目。步驟一(獲取appkey)1.在極光官網平台上新建短信應用(根據要求包名和應用名稱填寫好)2.獲取得到Jpush
Handler消息傳遞機制 Android的消息處理有四個核心類:Handler、Looper、Message、MessageQueue,都在android.o
創建一個Android應用程序 Android Application Project 設置工程的相關信息,默認會創建icon和activity