18 Loader 總結

這裏寫圖片描述
1. Loader 裝載器 Android3.0之後出來的 它能夠使Activity和Fragment 異步加載數據 變得簡單(Loader裏封裝了AsyncTask)markdown

  1. Loader特色:

    1,對每個Activity或者Fragment有效
    2,提供異步加載數據的機制
    3,監測數據源的變化 ,並對變化返回新的結果
    4,因爲配置發生改變 從新建立Loader時 他會自動連接上一個加載器遊標,不會從新查詢數據異步

  2. 使用:ide

    1. 初始化Loader initLoader(編號,查詢條件,回調接口);
    2. 實現回調接口 實現三個方法
    3. 在三個方法裏作相應的動做
      onCreateLoader(){
      //建立Loader對象 返回Loader
      }

    onLoadFinished{
    //加載數據
    }this

    onLoaderReset(){
    //清除數據
    }線程

    CursorLoader:包含了觀察者rest

    通常和ContentResolver一塊兒使用 加載ContentProvider暴漏出的數據
    經過 Uri設置ContentObserver,檢測數據源的變化
    繼承與AsyncTaskLoader<>code

    AsyncTaskLoader: 本身自定義Loaderserver

    onStartLoading{
    執行在主線程
    forceLoad();//必須執行 強制向下執行對象

    }
    loadInBackground(){
    //加載數據
    }繼承

    觀察者:時刻檢測數據的變化

    /**

    • 自定義的觀察者
    • @author sxy
      *
      */
      class MyContentObserver extends ContentObserver{

      public MyContentObserver(Handler handler) {
      super(handler);
      // TODO Auto-generated constructor stub
      }

      //當你的數據發生改變時 調用此方法
      @Override
      public void onChange(boolean selfChange) {
      // TODO Auto-generated method stub
      super.onChange(selfChange);
      //重啓Loader
      getLoaderManager().restartLoader(1, null, MainActivity.this);
      }

    }

    註冊觀察者:

    /**
     * 註冊觀察者對象    給當前Uri
     * 參數1:Uri對象
     * 參數2:   若是返回true    檢測到 content:sms    content:sms/address   content:sms/address/iii
     *        若是返回false    只能檢測到當前的content:sms    
     *        
     * 參數3:觀察者
     * 
     */
    getContentResolver().registerContentObserver(
            Uri.parse("content://sms"), true, new MyContentObserver(null));
相關文章
相關標籤/搜索