Android-AnsyncTask異步任務

同步和異步的概念區別:

同步,必須執行完成某個問題後才能繼續執行其餘的。java

異步,我會去先執行其餘問題,你執行完以後返回給我一個結果就能夠。android

 

 

android中爲何要引用異步任務呢

  android啓動的,會啓動一個線程也稱爲主線程,UI線程,可是咱們不能把全部耗時的任務交給主線程來完成,這樣會影響用戶的體驗,也就是說咱們要另外的開闢新的線程來執行咱們的任務,編程

可是在android中,(加載圖片,網絡編程都屬於耗時的操做),在android4.0後規定禁止在主線程中完成網絡操做,因此說這些耗時的任務要交給子線程,網絡

       問題,子線程中是不能進行ui操做的,只有做爲主線程的ui線程纔可以進行ui操做,那麼咱們怎麼講信息返回給用戶呢。框架

      方式1.咱們能夠經過handler,在handler中寫好了跟新的操做,在子線程中調用sendmessage通知咱們的handler跟新ui異步

      方式2.利用Activity.runonUIThread(Runnable)進行子線程到ui線程的切換。ide

 

 

爲何要是用AsyncTask?   

  很簡單,人都是很懶的,使用上述的兩種方式操做麻煩,因此大佬們就封裝了一個異步執行的方法,便於咱們直接處理耗時邏輯,更新UI.ui

  咱們通常用它完成網絡操做,圖片加載,數據傳輸等操做。(固然後續咱們會選擇咱們的第三方的框架來完成)url

 

Asynctask的基本使用:spa

首先它是一個抽象類,也就是說咱們要重寫他的方法而後在new

AsyncTask<Params,progress,result>

parames:啓動任務的時候執行的參數,好比傳入的url

Progress:後臺執行進度的百分比單位

result:執行完異步操做後返回的結果

(與handler相比,他的後臺是一個線程池,再數據龐大的時候回體現出優點)

 

 

AsyncTask的幾個重要的方法

 

 @Override
    protected void onPreExecute() {
        super.onPreExecute();
    }

  //執行耗時操做以前調用的一個方法,至關於咱們的初始化的方法

注意該該方法是運行在ui線程中的

 

 

  @Override
    protected String doInBackground(String... params) {
        return null;
    }

   該方負責執行咱們耗時的業務邏輯操做,也就是說他是在子線程中運行的,若是想要更新ui怎麼辦

調用的咱們的publicProgress方法能夠更新咱們的ui,此方法是在子線程中運行的

 

publishProgress(Object o);

  此方法表示更新咱們的進度,可用於更新下載的進度條等。

 

    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
    }

  此方法是在主線程中執行的方法,一旦咱們在耗時邏輯代碼中調用了publicProgress就表示咱們但願更新進度條。

此時就會調用這個方法到ui線程跟新咱們的進度條。

 

注意:task實例必須在ui線程中建立   task.excute(初始參數好比url);

           咱們無需手動的調用task中的方法

           task只能被執行一次

 

 

文章參考csdn小豬的android基礎知識對應文章。若是有興趣推薦你們可去閱讀。

相關文章
相關標籤/搜索