Android開發(fā)之Loader與LoaderManager

Loader是什么疏遏,有什么作用?

顧名思義就是加載器救军,簡(jiǎn)單來(lái)說(shuō)财异,Loader做了2件事:
(1)在單獨(dú)的線程中讀取數(shù)據(jù),不會(huì)阻塞UI線程
(2)監(jiān)視數(shù)據(jù)的更新

LoaderManager是什么唱遭,有什么作用戳寸?

LoaderManager就是加載器的管理器,一個(gè)LoaderManager可以管理一個(gè)或多個(gè)Loader拷泽,一個(gè)Activity或者Fragment只能有一個(gè)LoadManager庆揩。LoaderManager管理Loader的初始化俐东,重啟和銷毀操作。

使用Loader來(lái)加載手機(jī)中的音樂為例

1订晌、主布局虏辫,就是一個(gè)ListView

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#d9d9d9"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ListView
        android:id="@+id/music_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scrollbars="none" />

</RelativeLayout>

2、ListView的Item布局锈拨,主要顯示歌曲名稱和歌手信息

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/music_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="20sp" />

    <TextView
        android:id="@+id/music_singer"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

3砌庄、MainActivity,注釋比較詳細(xì)奕枢,使用比較簡(jiǎn)單

/**
 * 實(shí)現(xiàn)LoaderCallbacks 重寫三個(gè)方法
 * 
 * @author yungfan
 * 
 */
@SuppressLint("NewApi")
public class MainActivity extends Activity implements LoaderCallbacks<Cursor> {

    private ListView listView;

    // 使用SimpleCursorAdapter來(lái)填充數(shù)據(jù)
    private SimpleCursorAdapter mAdapter;

    // 使用CursorLoader來(lái)獲取數(shù)據(jù)
    private CursorLoader loader;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        listView = (ListView) findViewById(R.id.music_list);

        initMusic();
    }

    private void initMusic() {

        // 這里創(chuàng)建Adapter時(shí) 注意不傳遞數(shù)據(jù)
        mAdapter = new SimpleCursorAdapter(MainActivity.this, R.layout.item,
                null, new String[] { MediaStore.Audio.Media.TITLE,
                        MediaStore.Audio.Media.ARTIST }, new int[] {
                        R.id.music_name, R.id.music_singer }, 0);

        listView.setAdapter(mAdapter);

        // 通過異步的方式加載數(shù)據(jù)
        LoaderManager manager = getLoaderManager();
        // 第一個(gè)參數(shù)為id 第二個(gè)位Bundle數(shù)據(jù) 第三個(gè)為L(zhǎng)oaderCallbacks
        manager.initLoader(0, null, this);

    }

    // 首先檢查指定的id是否存在娄昆,如果不存在才會(huì)觸發(fā)該方法,通過該方法才能創(chuàng)建一個(gè)loader缝彬。
    public Loader<Cursor> onCreateLoader(int id, Bundle args) {

        // 查詢音樂數(shù)據(jù)庫(kù) 獲取音樂數(shù)據(jù) 并排序
        loader = new CursorLoader(this,
                MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, null, null, null,
                MediaStore.Audio.Media.DEFAULT_SORT_ORDER);

        return loader;
    }

    // 完成對(duì)Ui控件的更新萌焰,如果不再使用,將自動(dòng)釋放loader的數(shù)據(jù)谷浅,不需要使用close();
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
        mAdapter.swapCursor(data);
    }

    public void onLoaderReset(Loader<Cursor> loader) {
        mAdapter.swapCursor(null);
    }
}

4扒俯、運(yùn)行結(jié)果,手機(jī)中的音樂數(shù)據(jù)被加載到列表中顯示出來(lái)一疯,而且是按照一定的順序(數(shù)字 —>漢字拼音對(duì)應(yīng)字母升序 —> 字母升序)

music.jpg

注意:必須加上讀SD卡的權(quán)限

 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末撼玄,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子墩邀,更是在濱河造成了極大的恐慌掌猛,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件眉睹,死亡現(xiàn)場(chǎng)離奇詭異荔茬,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)竹海,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門兔院,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)乡数,“玉大人眶蕉,你說(shuō)我怎么就攤上這事【淅牵” “怎么了许起?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵十偶,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我园细,道長(zhǎng)惦积,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任猛频,我火速辦了婚禮狮崩,結(jié)果婚禮上蛛勉,老公的妹妹穿的比我還像新娘。我一直安慰自己睦柴,他們只是感情好诽凌,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著坦敌,像睡著了一般侣诵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上狱窘,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天杜顺,我揣著相機(jī)與錄音,去河邊找鬼蘸炸。 笑死躬络,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的搭儒。 我是一名探鬼主播穷当,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼仗嗦!你這毒婦竟也來(lái)了膘滨?” 一聲冷哼從身側(cè)響起甘凭,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤稀拐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后丹弱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體德撬,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年躲胳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蜓洪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡坯苹,死狀恐怖隆檀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情粹湃,我是刑警寧澤恐仑,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站为鳄,受9級(jí)特大地震影響裳仆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜孤钦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一歧斟、第九天 我趴在偏房一處隱蔽的房頂上張望纯丸。 院中可真熱鬧,春花似錦静袖、人聲如沸觉鼻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)滑凉。三九已至,卻和暖如春喘帚,著一層夾襖步出監(jiān)牢的瞬間畅姊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工吹由, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留若未,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓倾鲫,卻偏偏與公主長(zhǎng)得像粗合,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乌昔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容