最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android AsyncTask 后監(jiān)聽異步加載完畢的動作詳解

 更新時(shí)間:2016年11月15日 11:47:35   作者:Terry_龍  
這篇文章主要介紹了Android 使用AsyncTask 后監(jiān)聽異步加載完畢的動作的相關(guān)資料,需要的朋友可以參考下

Android 使用AsyncTask 后監(jiān)聽異步加載完畢的動作

  AsyncTask 的使用方法網(wǎng)上有很多例子,使用起來也非常的方便。這里就不詳細(xì)說具體的使用方法了,同學(xué)可以Google 一下,很多。

場景模擬

      當(dāng)我們在加載一個(gè)列表的時(shí)候,比如GridView ,這時(shí)候我們考慮到不阻塞UI的做法,一般會使用線程Thread 、Timer 或者使用AsyncTask ,而這些操作都是在在后臺另外開一個(gè)線程給我們找數(shù)據(jù),具體得到的數(shù)據(jù)需要使用Handler 去更新UI,AsyncTask 也是一樣使用到的Handler 只是它將Handler 封裝在了onPostExecute 執(zhí)行操作中。而這一操作可能會產(chǎn)生一個(gè)問題,比如你有一個(gè)列表更新數(shù)據(jù)庫使用到的是AsyncTask 異步操作的方式更新UI,而你的需求是當(dāng)我一進(jìn)來這個(gè)列表就統(tǒng)計(jì)這個(gè)列表的數(shù)據(jù)的數(shù)量或者讓某一行數(shù)據(jù)的狀態(tài)為選中狀態(tài)。傳統(tǒng)做法是直接new 一個(gè)AsyncTask 類讓它execute(); 之后會再操作UI。想法是對的,但有一個(gè)問題我們要注意到,因?yàn)樗钱惒郊虞d數(shù)據(jù)的方式,而你的數(shù)據(jù)量比較多或許查找數(shù)據(jù)需要一定的時(shí)間的時(shí)候,這時(shí)使用AsyncTask 執(zhí)行異步加載后更新UI再操作UI對象,可能會報(bào)空指針。

      這個(gè)問題的產(chǎn)生是,我們都知道代碼的執(zhí)行是自上而下執(zhí)行,當(dāng)你使用異步加載數(shù)據(jù)的時(shí)候,代碼讓你去執(zhí)行異步操作就不管了(多線程),而繼續(xù)會往下執(zhí)行代碼,你下面的代碼就是操作列表里面的UI,這時(shí)可想而知,異步加載數(shù)據(jù)還沒有結(jié)束還沒有對你的UI進(jìn)行更新,這些你的列表應(yīng)該是空的,而操作一個(gè)空的列表就會報(bào)空指針。

分析問題

   使用過AsyncTask 的同學(xué)都知道一個(gè)異步加載數(shù)據(jù)最少要重寫以下這兩個(gè)方法:

doInBackground   后臺執(zhí)行,比較耗時(shí)的操作都可以放在這里。注意這里不能直接操作UI。

onPostExecute   相當(dāng)于Handler 處理UI的方式,在這里面可以使用在doInBackground 得到的結(jié)果處理操作UI。

     有必要的話你還得重寫以下這三個(gè)方法,但不是必須的:

onProgressUpdate   可以使用進(jìn)度條增加用戶體驗(yàn)度。

onPreExecute           這里是最終用戶調(diào)用Excute時(shí)的接口

onCancelled             用戶調(diào)用取消時(shí),要做的操作

      根據(jù)上面的思路,可以看出,最終數(shù)據(jù)加載并顯示出來這一系列的操作都在onPostExecute  這個(gè)方法里面,那么如何監(jiān)聽所有UI都己經(jīng)在onPostExecute   里面處理完成了,再去執(zhí)行我們自己要操作呢?

解決問題

       這里給出我自己解決這一問題的思路,有更好想法的朋友歡迎跟貼共同探討。

       首先創(chuàng)建一個(gè)接口


private interface isLoadDataListener {
    public void loadComplete();
  }
   聲明這一接口變量

 

private isLoadDataListener loadLisneter;

  給接口賦值,得到接口對象


public void setLoadDataComplete(isLoadDataListener dataComplete) {
    this.loadLisneter = dataComplete;
  }
 

之后在AsyncTask 的onPostExecute處理UI完成后調(diào)用該接口,下面給出一個(gè)我以前項(xiàng)目使用到的AsyncTask 類:

  class loadGridAsyncTask extends AsyncTask<Integer, Integer, AppsAdapter> {

    private int poindex;

    public loadGridAsyncTask(int positionindex) {
      this.poindex = positionindex;
    }

    @Override
    protected AppsAdapter doInBackground(Integer... params) {
      // TODO Auto-generated method stub
      // mAppsModel.clear();
      Cursor temp = dbHelper.queryPageById(poindex);
      loadPage(mApps, temp);
      temp.close();
      return new AppsAdapter(STB.this, mAppsModel);
    }

    @Override
    protected void onPostExecute(AppsAdapter result) {

      gridViewExt itemGrid = (gridViewExt) viewFlipper
          .getChildAt(poindex);
      itemGrid.setColumnCount(pageColumnCount);
      itemGrid.setAdapter(result);
      if (loadLisneter != null) {
        loadLisneter.loadComplete();
      }
       
    }

  }

 

       通過上面的代碼,我們就得到一個(gè)數(shù)據(jù)加載完成后返回的接口,接下來的問題就是我們利用這個(gè)接口來處理我們的UI了,比如讓某一UI選中,得到這個(gè)列表的UI數(shù)量等,看下面的代碼:



new loadGridAsyncTask(1).execute();
                  setLoadDataComplete(new isLoadDataListener() {

                    @Override
                    public void loadComplete() {
                      // TODO Auto-generated method stub
                       //這里執(zhí)行你要的操作,當(dāng)UI更新完成后會自動調(diào)用這里面的代碼                    }
                  });

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • 將cantk runtime嵌入到現(xiàn)有的APP中的方法

    將cantk runtime嵌入到現(xiàn)有的APP中的方法

    今天小編就為大家分享一篇關(guān)于將cantk runtime嵌入到現(xiàn)有的APP中的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • AndroidStudio升級4.1坑(無法啟動、插件plugin不好用、代碼不高亮)

    AndroidStudio升級4.1坑(無法啟動、插件plugin不好用、代碼不高亮)

    這篇文章主要介紹了AndroidStudio升級4.1坑(無法啟動、插件plugin不好用、代碼不高亮),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • android實(shí)現(xiàn)播放網(wǎng)絡(luò)視頻

    android實(shí)現(xiàn)播放網(wǎng)絡(luò)視頻

    這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)播放網(wǎng)絡(luò)視頻,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-04-04
  • Android Service服務(wù)詳細(xì)介紹及使用總結(jié)

    Android Service服務(wù)詳細(xì)介紹及使用總結(jié)

    這篇文章主要介紹了Android Service 服務(wù)的詳細(xì)資料,網(wǎng)上關(guān)于Android Service 服務(wù)的文章比較多,但是不是很全面,不夠細(xì)致,畢竟是Android 四大組件之一,重要性不用說,這里總結(jié)下,需要的朋友可以參考下
    2016-12-12
  • Android編程中selector背景選擇器用法實(shí)例分析

    Android編程中selector背景選擇器用法實(shí)例分析

    這篇文章主要介紹了Android編程中selector背景選擇器用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Selector的結(jié)構(gòu)描述與使用技巧,需要的朋友可以參考下
    2016-01-01
  • Android 高仿微信語音聊天頁面高斯模糊(毛玻璃效果)

    Android 高仿微信語音聊天頁面高斯模糊(毛玻璃效果)

    大家在使用微信聊天的時(shí)候有沒有注意到微信語言聊天用的是高斯模糊效果,基于代碼是如何實(shí)現(xiàn)的呢?下面小編給大家?guī)砹薃ndroid 高仿微信語音聊天頁面高斯模糊(毛玻璃效果),感興趣的朋友一起看下吧
    2016-08-08
  • 利用Kotlin的協(xié)程實(shí)現(xiàn)簡單的異步加載詳解

    利用Kotlin的協(xié)程實(shí)現(xiàn)簡單的異步加載詳解

    這篇文章主要給大家介紹了關(guān)于利用Kotlin的協(xié)程實(shí)現(xiàn)簡單的異步加載的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • Android仿銀行客戶簽名并且保存簽名的截圖文件并命名為本地時(shí)間

    Android仿銀行客戶簽名并且保存簽名的截圖文件并命名為本地時(shí)間

    本文通過實(shí)例代碼給大家介紹了Android仿銀行客戶簽名并且保存簽名的截圖文件并命名為本地時(shí)間,需要的朋友可以參考下
    2017-07-07
  • Android 訪問文件權(quán)限的四種模式介紹

    Android 訪問文件權(quán)限的四種模式介紹

    這篇文章主要介紹了Android 訪問文件權(quán)限的四種模式介紹的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • 詳解Android安全防護(hù)之加密算法

    詳解Android安全防護(hù)之加密算法

    Android應(yīng)用對安全防范這方面要求越來越高了。特別是金融行業(yè),如果app沒有沒有做好安全處理,那些很容易被一些Hacker(黑客)所攻擊。并不是說做了這些安全防范,這個(gè)應(yīng)用就百分之百的安全的。只是說能夠盡可能加大破解難度。本文將詳細(xì)介紹Android安全防護(hù)之加密算法。
    2021-06-06

最新評論

清远市| 仪征市| 大厂| 咸宁市| 阿瓦提县| 龙门县| 汕头市| 南宁市| 瑞丽市| 德保县| 光泽县| 凉城县| 东城区| 肃北| 陵川县| 阿荣旗| 布拖县| 仁化县| 平和县| 静海县| 隆德县| 宜宾市| 洞口县| 兰溪市| 阳泉市| 云阳县| 拜泉县| 隆化县| 宁陵县| 赤峰市| 九寨沟县| 湘潭市| 静宁县| 盐源县| 滦南县| 安化县| 喀喇| 岐山县| 贵溪市| 白水县| 平和县|