亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android的異步任務(wù)AsyncTask詳解

 更新時間:2015年07月29日 11:03:12   投稿:hebedich  
本文給大家介紹的是Android的異步任務(wù)AsyncTask,在Android中實現(xiàn)異步任務(wù)機制有兩種方式,Handler和AsyncTask。今天我們先來主要談下ASYNCTASK。

AsyncTask,顧名思義,異步任務(wù)。說到異步,最簡單的理解就是不同步。再復(fù)雜一點理解,就得舉例子了。

假設(shè)我要去火車站買票,剛到火車站我突然發(fā)現(xiàn)我忘了帶身份證。怎么辦?怎么辦!

想辦法,想辦法!我想我應(yīng)該找個在學(xué)校的同學(xué)幫我送過來,因為我不能自己回去拿啊,還要排隊呢,走不開。嗯,要找人送過來。但是問題來了,我找人送身份證了,我去排隊了,如果排到第一位了身份證還沒到怎么辦?叮,腦袋上面突然亮了一個小燈泡,機智的我在排隊前想到了兩種方案:

第一種方案,讓售票員等著我,我后面隊伍里買票的人也等著我,我一直在窗口第一位置等著同學(xué)來送身份證,直到,我的身份證被送來,然后順利買票。

另一種方案呢,就是我跟售票員說一下,讓我在一邊等著送身份證,后面的人繼續(xù)買票,等我的身份證送來的時候我通知下售票員,就可以盡快排到隊伍第一位(不一定是立即排到第一位,因為萬一有人正在買票,我不能過去打斷他)然后買票。

所以呢,選第一種還是第二種?我肯定選第二種,因為選第一種肯定會被后面排隊的人罵死,而且還有可能被售票員罵,搞不好還會挨揍,畢竟因為我一個人,浪費了這么多人的時間,也拖慢了售票員的工作效率。

好了,例子就說到這里。在例子里,第二種方法就是異步的。異步往往和多線程有關(guān),而且異步任務(wù)也大多是交由一個單獨的線程完成,然后返回結(jié)果給主線程。這里售票員相當(dāng)于cpu,而排隊買票的人相當(dāng)于等待被執(zhí)行的任務(wù),而我是個被標記為異步的任務(wù)(因為我知道我?guī)矸葑C,不能立即買到票,所以排隊前就想好了第二種方案),當(dāng)cpu執(zhí)行到我這個任務(wù)的時候,發(fā)現(xiàn)我這個任務(wù)可執(zhí)行的條件(身份證)不具備,所以由我發(fā)起了一個異步任務(wù)(同學(xué)送票),去獲取可執(zhí)行的條件,之后立即把位置讓出來,讓其他排隊的任務(wù)繼續(xù)執(zhí)行。直到我的身份證拿來,然后立馬通知cpu準備接待我。

嗯,差不多就是這樣了。開始說正文,android里面的AsyncTask。先上一段官網(wǎng)的引用:

復(fù)制代碼 代碼如下:

AsyncTask enables proper and easy use of the UI thread. This class allows to perform background operations and publish results on the UI thread without having to manipulate threads and/or handlers.

是英語,雖然我能懂大概是什么意思,但是還是不翻譯了,怕誤人子弟,等我英語學(xué)的再好些再來翻譯吧。不過還是要解釋下大概的意思,就是說AsyncTask可以在UI線程上做一些后臺操作,也能返回操作結(jié)果到UI線程上。我們知道UI線程是不能做一些耗時的操作的,但是有了AsyncTask,我們可以這樣做了。但是,

復(fù)制代碼 代碼如下:

AsyncTask is designed to be a helper class around Thread and Handler and does not constitute a generic threading framework. AsyncTasks should ideally be used for short operations (a few seconds at the most.) If you need to keep threads running for long periods of time, it is highly recommended you use the various APIs provided by the java.util.concurrent package such as Executor, ThreadPoolExecutor and FutureTask.

對于耗時比較久的任務(wù),還是不建議放在AsyncTask中執(zhí)行。AysncTask被設(shè)計成Thread和Handler的輔助類,并不能執(zhí)行過于復(fù)雜和耗時的任務(wù),這種任務(wù)應(yīng)該用其他方法這里就不說了。AsyncTask最好用于耗時最多只有幾秒鐘的操作,比如向網(wǎng)絡(luò)請求個xml或是json之類的網(wǎng)絡(luò)操作,或是用在程序的初始化界面等等。

下面說下AsyncTask的使用。其實很簡單。

首先你需要定義一個AsyncTask的子類,并且必須重寫父類的doInBackground(Params...)方法。另外還有onPostExecute(Result)方法也可重寫,這個方法在doInBackground之后被自動調(diào)用,所以你可以在這里寫一些任務(wù)完成的通知代碼。

先給一個官方的例子:

private class DownloadFilesTask extends AsyncTask<URL, Integer, Long> {
  protected Long doInBackground(URL... urls) {
    int count = urls.length;
    long totalSize = 0;
    for (int i = 0; i < count; i++) {
      totalSize += Downloader.downloadFile(urls[i]);
      publishProgress((int) ((i / (float) count) * 100));
      // Escape early if cancel() is called
      if (isCancelled()) break;
    }
    return totalSize;
  }

  protected void onProgressUpdate(Integer... progress) {
    setProgressPercent(progress[0]);
  }

  protected void onPostExecute(Long result) {
    showDialog("Downloaded " + result + " bytes");
  }
 }

執(zhí)行AsyncTask的時候,必須在UI線程中執(zhí)行,如下語句。

new DownloadFilesTask().execute(url1, url2, url3);

可以看到,在繼承AsyncTask的時候,有幾個泛型類型,如AsyncTask<URL, Integer, Long>,簡單解釋下。

第一個可以指定輸入?yún)?shù)的類型,就是new DownloadFilesTask().execute()的參數(shù)(最后傳到了doInBackground),這里的參數(shù)可以不只一個,因為最后到方法里面,收到的是個數(shù)組。
第二個可指定發(fā)送進度更新需要的類型,一般都是整型,用在publishProgress(用來在后臺進程中發(fā)送進度的方法,直接使用的,不用定義)和onProgressUpdate兩個方法中。
第三個是AsyncTask返回結(jié)果的數(shù)據(jù)類型,它設(shè)置了doInBackground的返回類型,以及onPostExecute的輸入?yún)?shù)類型
當(dāng)然,如果你什么都不需要,可以都使用Void。

private class MyTask extends AsyncTask<Void, Void, Void> { ... }

另外,還有一個可以重寫的方法,是onPreExecute(),它在doInBackground之前被調(diào)用,所以如果需要的話,你可以重寫它然后做一些實例化進度條啊之類的工作。

最后,總結(jié)一下:

使用AsyncTask,你要做的是,繼承父類,然后重寫doInBackground(Params...),在里面實現(xiàn)后臺操作,如果有返回結(jié)果的話,重寫onPostExecute(Result)然后處理后臺程序的結(jié)果。

如果需要更新進度的話,在onPreExecute()里實例化進度條(也可以不在這),之后在doInBackground(Params...)里面用publishProgress()發(fā)布進度值,然后重寫onProgressUpdate(Progress...)接收onPreExecute()發(fā)布的結(jié)果,并添加更新進度條的代碼。

以上就是關(guān)于Android中異步任務(wù)的內(nèi)容了,希望大家能夠喜歡。

相關(guān)文章

  • Android實現(xiàn)自定義手勢和識別手勢的功能

    Android實現(xiàn)自定義手勢和識別手勢的功能

    這篇文章主要介紹了Android實現(xiàn)自定義手勢和識別手勢的功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-10-10
  • Android開發(fā)之瀑布流控件的實現(xiàn)與使用方法示例

    Android開發(fā)之瀑布流控件的實現(xiàn)與使用方法示例

    這篇文章主要介紹了Android開發(fā)之瀑布流控件的實現(xiàn)與使用方法,結(jié)合實例形式分析了Android瀑布流控件的定義與使用方法,需要的朋友可以參考下
    2017-10-10
  • Android 基于Socket的聊天應(yīng)用實例(二)

    Android 基于Socket的聊天應(yīng)用實例(二)

    本篇文章主要介紹了Android 基于Socket的聊天應(yīng)用實例,具有一定的參考價值,有需要的可以了解一下。
    2016-12-12
  • android如何獲取textview最多顯示

    android如何獲取textview最多顯示

    今天在公司遇到一個需求;TextView設(shè)置最多顯示8個字符,超過部分顯示...(省略號),那么android如何獲取textview最多顯示,感興趣的可以了解一下
    2021-06-06
  • Flutter實現(xiàn)滾動選擇數(shù)字

    Flutter實現(xiàn)滾動選擇數(shù)字

    這篇文章主要為大家詳細介紹了Flutter實現(xiàn)滾動選擇數(shù)字,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 一文帶你深入理解Android Window系統(tǒng)

    一文帶你深入理解Android Window系統(tǒng)

    Android中的窗口系統(tǒng)是應(yīng)用程序用戶界面的核心組件之一,它負責(zé)管理可視化區(qū)域、處理用戶輸入事件以及與系統(tǒng)UI交互,本文將深入介紹與Android窗口系統(tǒng)相關(guān)的重要概念,需要的朋友可以參考下
    2023-10-10
  • Android中的Service相關(guān)全面總結(jié)

    Android中的Service相關(guān)全面總結(jié)

    接下來將介紹Service的種類;Service與Thread的區(qū)別;Service的生命周期;startService 啟動服務(wù);Local與Remote服務(wù)綁定等等,感興趣的朋友可以了解下
    2013-01-01
  • Android Studio查看Android 5.x源碼的步驟詳解

    Android Studio查看Android 5.x源碼的步驟詳解

    Google為Android開發(fā)者帶來Android Studio,用來取代Eclipse。從Android Studio出現(xiàn)起,整機開發(fā)和Android源碼閱讀和編輯一定能用上它。這篇文章小編就帶大家學(xué)習(xí)下如何使用Android Studio查看Android 5.x源碼,有需要的可以參考借鑒。
    2016-09-09
  • Android利用FlexboxLayout輕松實現(xiàn)流動布局

    Android利用FlexboxLayout輕松實現(xiàn)流動布局

    flexbox是屬于CSS的一種布局方案,可以簡單、完整、響應(yīng)式的實現(xiàn)各種頁面布局。谷歌將其引入以提高復(fù)雜布局的能力。下面這篇文章主要給大家介紹了在Android中利用FlexboxLayout輕松實現(xiàn)流動布局的相關(guān)資料,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-04-04
  • Android基于方法池與回調(diào)實現(xiàn)登錄攔截的場景

    Android基于方法池與回調(diào)實現(xiàn)登錄攔截的場景

    這篇文章主要為大家介紹了Android基于方法池與回調(diào)實現(xiàn)登錄攔截的場景詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08

最新評論