相關(guān)資訊
- 谷歌放出Android M開(kāi)發(fā)者預(yù)覽版2更
- 有道云筆記Android版升級(jí) 密碼保護(hù)
- Eclipse開(kāi)發(fā)Android程序在手機(jī)上運(yùn)
- 在eclipse中查看android源代碼的兩
- android開(kāi)發(fā)eclipse alt+“/”自動(dòng)
- eclipse怎么導(dǎo)入項(xiàng)目 eclipse導(dǎo)入A
- android迅雷看看怎么刪除本地視頻
- 迅雷android pad能播放xv格式嗎 迅
- 什么手機(jī)是用的安卓5.0 使用Androi
- 安卓5.0八大強(qiáng)悍功能是什么 Androi
本類(lèi)常用軟件
-
福建農(nóng)村信用社手機(jī)銀行客戶(hù)端下載下載量:584204
-
Windows優(yōu)化大師下載量:416898
-
90美女秀(視頻聊天軟件)下載量:366961
-
廣西農(nóng)村信用社手機(jī)銀行客戶(hù)端下載下載量:365699
-
快播手機(jī)版下載量:325855
最近在在做一個(gè)Android應(yīng)用開(kāi)發(fā),都是用AsyncTask來(lái)完成后臺(tái)任務(wù),簡(jiǎn)單總結(jié)一下。
通常使用AsyncTask,是通過(guò)繼承這個(gè)超類(lèi)來(lái)完成的,如:
class BackgroundTask extends AsyncTask { @Override protected Object doInBackground(Object... params) { return null; }}
復(fù)制代碼
子類(lèi)必須重載 doInBackground方法。“<>”里面的三個(gè)類(lèi)型,依次代表執(zhí)行參數(shù)類(lèi)型、進(jìn)度參數(shù)類(lèi)型和結(jié)果參數(shù)類(lèi)型。doInBackground的參數(shù)類(lèi)型必須是執(zhí)行參數(shù)類(lèi)型,返回的類(lèi)型必須和結(jié)果參數(shù)類(lèi)型。這三個(gè)類(lèi)型應(yīng)該根據(jù)需要來(lái)定,其實(shí)用Object也可以,用的時(shí)候在做類(lèi)型轉(zhuǎn)換。啟動(dòng)一個(gè)AsyncTask,可以在這樣做:
BackgroudTask bt = new BackgroundTask();
bt.execute("param");
復(fù)制代碼
使用AsyncTask的容易犯下的錯(cuò)誤是在doInBackground方法里面直接對(duì)UI元素進(jìn)行操作。如果需要和UI進(jìn)行交互,可以配合使用publishProgress和onProgressUpdate。比如
@Override protected Object doInbackground(Object... params) {
... publishProgress("完成了20%");
... publishProgress("完成了80%");
... return null;
}
protected void onProgressUpdate(Object... progress)
{ ... textView1.setText((String)progress[0]); ... }
復(fù)制代碼
這里onProgressUpdate是工作在UI線程的。
使用AsyncTask的另一個(gè)問(wèn)題是關(guān)于cancel。實(shí)際上,單單調(diào)用AsyncTask對(duì)象的cancel方法,并不能停止doInBackground方法的繼續(xù)執(zhí)行。通常比較接受的方法是設(shè)置一個(gè)標(biāo)志位,也就是在每次執(zhí)行前檢查一下某個(gè)變量的值(或者可以調(diào)用isCancelled方法判斷),來(lái)決定繼續(xù)執(zhí)行還是停止。這種處理手段對(duì)于一些循環(huán)性的工作比較有用,但是對(duì)于一些循環(huán)性弱的工作可能并不怎么有效。這也算是AsyncTask的一個(gè)弱點(diǎn)。和Thread相比,AsyncTask還有一個(gè)弱點(diǎn)是效率的問(wèn)題,這個(gè)可以在本文開(kāi)頭給出的鏈接中找到相關(guān)的信息。
AsyncTask還有一個(gè)問(wèn)題和onPreExecute方法有關(guān)。這個(gè)方法是工作在UI線程的。雖然是叫onPreExecute,但是doInBackground方法(也就是實(shí)際上的execute),并不會(huì)等待onPreExecute方法做完全部操作才開(kāi)始執(zhí)行。所以,一般還是不要用這個(gè)方法,可以在調(diào)用AsyncTask對(duì)象的execute方法之前就把該完成的操作完成,以免引起某些錯(cuò)誤。
AsyncTask還有一個(gè)方法是onPostExecute,這個(gè)方法也是工作在UI線程,它是在doInBackground方法執(zhí)行結(jié)束,并返回結(jié)果后調(diào)用。這個(gè)方法里面可以調(diào)用UI線程的startActivity,這樣可以實(shí)現(xiàn)完成大量后臺(tái)操作后,自動(dòng)跳轉(zhuǎn)Activity的功能。這個(gè)方法里面也可以執(zhí)行另一個(gè)AsyncTask的execute方法。