亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android的異步任務AsyncTask詳解

2020-04-11 11:27:57
字體:
來源:轉載
供稿:網友

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

假設我要去火車站買票,剛到火車站我突然發現我忘了帶身份證。怎么辦?怎么辦!

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

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

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

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

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

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

復制代碼 代碼如下:

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.

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

復制代碼 代碼如下:

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.

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

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

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

先給一個官方的例子:

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");  } }

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

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

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

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

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

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

最后,總結一下:

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

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

以上就是關于Android中異步任務的內容了,希望大家能夠喜歡。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久久久97| 美女国内精品自产拍在线播放| 日韩美女视频在线观看| 日韩精品视频免费在线观看| 日韩中文字幕视频在线观看| 欧美高清不卡在线| 日韩欧美在线视频日韩欧美在线视频| 日韩在线观看免费全| 裸体女人亚洲精品一区| 91精品久久久久久久久青青| 韩国日本不卡在线| www.国产精品一二区| 亚洲欧美第一页| 亚洲激情视频在线观看| 日韩视频免费在线| 精品久久久久久久久中文字幕| 亚洲国产成人久久综合一区| 一本色道久久88亚洲综合88| 欧美性猛交99久久久久99按摩| 国产精品免费一区二区三区都可以| 久久97精品久久久久久久不卡| 亚洲精品日产aⅴ| 亚洲精品理论电影| 亚洲999一在线观看www| 久久视频精品在线| 在线免费看av不卡| 国产91在线播放| 亚洲人成电影网| 亚洲性av网站| 爽爽爽爽爽爽爽成人免费观看| 日韩在线观看你懂的| 精品无人国产偷自产在线| 亚洲一区国产精品| 国产亚洲欧美日韩一区二区| 欧美精品久久久久a| 精品久久久免费| 欧美视频在线视频| 亚洲人成免费电影| 精品毛片网大全| 国产精品va在线播放我和闺蜜| www.精品av.com| 懂色av中文一区二区三区天美| 亚洲电影免费观看高清完整版在线| 8x海外华人永久免费日韩内陆视频| 久久手机精品视频| 欧美高跟鞋交xxxxhd| 日韩av免费在线看| 国产精品av网站| 成人乱色短篇合集| 中文字幕国内精品| 亚洲日本中文字幕| 国产精品88a∨| 一级做a爰片久久毛片美女图片| 亚洲精品国产综合区久久久久久久| 国内精品一区二区三区四区| 亚洲视频在线观看视频| 成人久久一区二区三区| 92国产精品久久久久首页| 久久久精品在线观看| 亚洲网站在线播放| 精品欧美国产一区二区三区| 57pao成人国产永久免费| 日本三级韩国三级久久| 亚洲精品国产品国语在线| 成人欧美一区二区三区黑人孕妇| 亚洲欧洲日产国码av系列天堂| 国产精品成av人在线视午夜片| 亚洲天堂av在线播放| 国产91色在线| 久久免费视频观看| 欧美孕妇性xx| 国产精品第一区| 91精品国产高清久久久久久久久| 蜜臀久久99精品久久久无需会员| 日本最新高清不卡中文字幕| 欧美怡红院视频一区二区三区| 久久久精品网站| 欧美国产日本在线| 亚洲free性xxxx护士白浆| 久久精品欧美视频| 亚洲最大的网站| 成人福利在线观看| 亚洲电影免费观看高清完整版在线| 懂色aⅴ精品一区二区三区蜜月| 国产精品一区二区久久久| 日韩精品有码在线观看| 91成人在线视频| 亚洲天堂第二页| 77777少妇光屁股久久一区| 亚洲精品小视频| 91精品国产九九九久久久亚洲| 国产亚洲精品日韩| 亚洲精品国偷自产在线99热| 在线精品视频视频中文字幕| 欧美日韩高清区| 国产在线视频欧美| 国产精品嫩草视频| 亚洲精品福利免费在线观看| 精品成人在线视频| 在线电影av不卡网址| 久久久久久久999| 成人av在线亚洲| 欧美激情欧美狂野欧美精品| 久久视频在线直播| 色噜噜狠狠色综合网图区| 国产成人一区二区三区小说| 日韩欧美aⅴ综合网站发布| 7m第一福利500精品视频| 成人国产精品日本在线| 久久777国产线看观看精品| 亚洲欧美一区二区三区在线| 日韩专区中文字幕| 成人日韩在线电影| 日韩免费电影在线观看| 亚洲成av人乱码色午夜| 亚洲欧美精品中文字幕在线| 亚洲精品一区二三区不卡| 亚洲一区精品电影| 日韩av高清不卡| 久久国产精品久久久久久| 欧美一区二区三区艳史| 国产日本欧美一区二区三区在线| 欧美自拍视频在线| 亚洲最大福利网站| 国内偷自视频区视频综合| 欧美黄网免费在线观看| 国语自产精品视频在线看| 日本午夜人人精品| 国产日本欧美一区二区三区在线| 国产精品普通话| 992tv在线成人免费观看| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美日韩视频在线| 欧美特黄级在线| 亚洲毛茸茸少妇高潮呻吟| 日韩视频―中文字幕| 狠狠爱在线视频一区| 久久综合亚洲社区| 色妞在线综合亚洲欧美| 国产精品jvid在线观看蜜臀| 亚洲高清免费观看高清完整版| 久久综合88中文色鬼| 国产98色在线| 成人免费视频网址| 欧美野外wwwxxx| 国产性色av一区二区| 久久久久久久久久国产精品| 91免费视频国产| 欧美日韩裸体免费视频| 国产国语videosex另类| 亚洲福利影片在线| 久久久久国产精品免费网站| 国产精品成人国产乱一区| 国产精品第一视频| 久久躁日日躁aaaaxxxx| 亚洲欧洲中文天堂| 日本一欧美一欧美一亚洲视频| 国内成人精品一区| 欧美日本亚洲视频| 中文字幕在线亚洲| 久久97精品久久久久久久不卡| 91色p视频在线| 欧美高清理论片| 2021久久精品国产99国产精品|