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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于loader asyncTaskLoader AsyncTask的理解

發布時間:2024/4/17 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于loader asyncTaskLoader AsyncTask的理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 在statckOverflow里查了一下,說是 AsyncTaskLoader不需要寫代碼來處理activiy 配置(系統字體大小,orientation,輸入設備類型等都叫做activity的配置)變化帶來的影響,但是缺點是加載時候不能解散掉進度框,不能在onLoadFinished時切換fragment.單純的從load data?
    角度考慮,AsyncTaskLoader更合適。

  • If you need UI changes after data is loaded - AsyncTask might server you better, especially if you are working with fragments, but remember to handle activity configuration changes.?
    意思是說,你向數據加載完成之后ui改變,異步任務更適合,但是你需要寫代碼去處理activity的配置改變帶來的影響。

  • AsyncTaskLoader是基于AsyncTask的?
    AsyncTaskLoader有一個優點,他不僅可以異步(通俗理解就是又開了一個線程而已),并且當他檢測到數據的變化時會自動加載。

    google文檔中關于Loader的說法:?
    Introduced in Android 3.0, loaders make it easy to asynchronously load data in an activity or fragment. Loaders have these characteristics:?
    1、They are available to every Activity and Fragment. //支持Activity和Fragment?
    2、They provide asynchronous loading of data. //異步加載(就是異步任務來完成的)?
    3、They monitor the source of their data and deliver new results when the content changes. //當數據源改變時能及時通知客戶端(自己特有的)?
    4、They automatically reconnect to the last loader’s cursor when being recreated after a configuration change. Thus, they don’t need to re-query their data. //發生configuration change時自動重連接(自己特有的)

  • Loader由什么組成?

  • ??總共有四個特性最終決定了一個Loader的行為:

    • 執行異步載入的任務。為了確保在一個獨立線程中執行載入操作,Loader的子類必須繼承AsyncTaskLoader而不是Loader類。AsyncTaskLoader是一個抽象Loader,它提供了一個AsyncTask來做它的執行操作。當定義子類時,通過實現抽象方法loadInBackground方法來實現異步task。該方法將在一個工作線程中執行數據加載操作。

    • 在一個注冊監聽器中接收載入完成返回的結果(見附注1)。對于每個Loader來說,LoaderManager注冊一個OnLoadCompleteListener,該對象將通過調用onLoadFinished(Loader loader, D result)方法使Loader將結果傳送給客戶端。Loader通過調用Loader#deliverResult(D result),將結果傳遞給已注冊的監聽器們。

    • 三種不同狀態(見附注2)。任何Loader將處于三種狀態之中,已啟動、已停止、重啟:?
      a. 處于已啟動狀態的Loader會執行載入操作,并在任何時間將結果傳遞到監聽器中。已啟動的Loader將會監聽數據改變,當檢測到改變時執行新的載入。一旦啟動,Loader將一直處在已啟動狀態,一直到轉換到已停止和重啟。這是唯一一種onLoadFinished永遠不會調用的狀態。?
      b. 處于已停止狀態的Loader將會繼續監聽數據改變,但是不會將結果返回給客戶端。在已停止狀態,Loader可能被啟動或者重啟。?
      c. 當Loader處于重啟狀態時,將不會執行新的載入操作,也不會發送新的結果集,也不會檢測數據變化。當一個Loader進入重啟狀態,它必須解除對應的數據引用,方便垃圾回收(同樣地,客戶端必須確定,在Loader無效之后,移除了所有該數據的引用)。通常,重啟Loader不會兩次調用;然而,在某些情況下他們可能會啟動,所以如果必要的話,它們必須能夠適時重啟。

    • 有一個觀察者接受數據源改變的通知。Loader必須實現這些Observer其中之一(比如ContentObserver,BroadcastReceiver等),來檢測底層數據源的改變。當檢測到數據改變,觀察者必須調用Loader#onContentChanged()。在該方法中執行兩種不同操作:a. 如果Loader已經處于啟動狀態,就會執行一個新的載入操作; b. 設置一個flag標識數據源有改變,這樣當Loader再次啟動時,就知道應該重新載入數據了。

    從以上我們大致就可以知道他們的區別所在了。

    總結

    以上是生活随笔為你收集整理的关于loader asyncTaskLoader AsyncTask的理解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。