-
AsyncTask<String,Void,Bitmap>三個(gè)參數(shù)分別為:url類型,進(jìn)度值類型,返回值類型。 這里的例子暫時(shí)不設(shè)置進(jìn)度值,url設(shè)置為String類型,又因?yàn)槲覀兗虞d的是一張Bitmap,所以返回的參數(shù)類型設(shè)置為 Bitmap。 1. doInBackground(String...params)傳進(jìn)來的是一個(gè)可變長(zhǎng)數(shù)組,也就是說,我們可以傳進(jìn)不止一個(gè)參數(shù)(通過execute()傳進(jìn)來),這些參數(shù)依次存在于這個(gè)數(shù)組中?,F(xiàn)在只有一個(gè)參數(shù),所以只要寫個(gè)params[0]取出對(duì)應(yīng)的URL即可。 2. 定義一個(gè)Bitmap,也就是我們所要獲取的Bitmap。 3. 定義一個(gè)訪問網(wǎng)絡(luò)的URLconnection,也就是一個(gè)網(wǎng)絡(luò)連接對(duì)象connection。 4. 定義一個(gè)InputStream,用于獲取數(shù)據(jù)的輸入流。 5. 初始化connection:connection = new URL(url).openConnection();這里需要自行導(dǎo)入jar包:import java.net.URL; 另外需要try-catch包圍。 6. 獲取輸入流:is = connection.getInputStream(); 7. 對(duì)輸入流進(jìn)行包裝:BufferedInputStream bis = new BufferedInputStream(is); 8. 通過decodeStream()將輸入流解析成 Bitmap:bitmap = BitmapFactory.decodeStream(bis); 9. 關(guān)閉輸入流、返回 bitmap。查看全部
-
網(wǎng)絡(luò)操作作為不穩(wěn)定的廢時(shí)操作,從android 4.0開始就被嚴(yán)禁放入主線程中 通常采用在異步線程處理下載圖像 在UI線程設(shè)置圖像 ProgressBar XML屬性 visibility="gone"可設(shè)置為默認(rèn)狀態(tài)下為隱藏 VISIBLE:設(shè)置控件可見 INVISIBLE:設(shè)置控件不可見 GONE:設(shè)置控件隱藏 而INVISIBLE和GONE的主要區(qū)別是:當(dāng)控件visibility屬性為INVISIBLE時(shí),界面保留了view控件所占有的空間;而控件屬性為GONE時(shí),界面則不保留view控件所占有的空間。查看全部
-
構(gòu)建AsyncTack子類的參數(shù) AsyncTask<Params,Progress,Result>是一個(gè)抽象類,通常用于被繼承,繼承AsyncTask需要指定如下三個(gè)泛型參數(shù): params:?jiǎn)?dòng)任務(wù)時(shí)輸入?yún)?shù)的類型。 progress:后臺(tái)任務(wù)執(zhí)行中,返回進(jìn)度值的類型。 Result:后臺(tái)執(zhí)行任務(wù)完成后,返回結(jié)果的類型。 ------------------------ 如何構(gòu)建AsyncTask子類的回調(diào)方法? 一個(gè)完整的AsyncTask通常需要指定如下幾個(gè)方法: 1. doInBackground:這是AsyncTask子類所必須要重寫的方法,異步執(zhí)行后臺(tái)線程將要完成的任務(wù)。我們所有的耗時(shí)操作都將在這個(gè)方法中進(jìn)行操作。 2. onPreExecute:執(zhí)行后臺(tái)耗時(shí)操作之前被調(diào)用,通常是用戶完成一些初始化操作。 3. onPostExecute:當(dāng)doInBackground()完成后,系統(tǒng)會(huì)自動(dòng)調(diào)用此方法,并將doInBackground()返回的值傳給該方法,也就是展示處理完成的結(jié)果。 4. onProgressUpdate:在doInBackground()方法中調(diào)用publishProgrsss()更新任務(wù)的執(zhí)行進(jìn)度后,就會(huì)觸發(fā)該方法(必須先調(diào)用publishProgrsss()),就可以知道當(dāng)前耗時(shí)操作的完成進(jìn)度。 ---------------------------------- 額外補(bǔ)充: 1. 注意這里的例子繼承的是 AsyncTask<Void,Void,Void>,需要帶上三個(gè)泛型,定義Void泛型要注意V是大寫。。。 2. 執(zhí)行順序:onPreExecute() --> doInBackground() --> onProgressUpdate() --> onPostExecute()。查看全部
-
為什么需要使用異步任務(wù)? 我們知道,Android中只有UI線程,也就是主線程才能進(jìn)行對(duì)UI的更新操作,而其他線程是不能直接操作UI的.這樣的好處是保證了UI的穩(wěn)定性和準(zhǔn)確性,避免多個(gè)線程同時(shí)對(duì)UI進(jìn)行操作而造成UI的混亂.但Android是一個(gè)多線程的操作系統(tǒng),我們總不能把所有的任務(wù)都放在主線程中進(jìn)行實(shí)現(xiàn),比如網(wǎng)絡(luò)操作,文件讀取等耗時(shí)操作,如果全部放到主線程去執(zhí)行,就可能會(huì)造成后面任務(wù)的阻塞.Android會(huì)去檢測(cè)這種阻塞,當(dāng)阻塞時(shí)間太長(zhǎng)的時(shí)候,就會(huì)拋出Application Not Responsed(ANR)錯(cuò)誤.所以我們需要將這些耗時(shí)操作放在非主線程中去執(zhí)行.這樣既避免了Android的單線程模型,又避免了ANR. .AsyncTask為何而生? 提到異步任務(wù),我們能想到用線程,線程池去實(shí)現(xiàn).確實(shí),Android給我們提供了主線程與其他線程通訊的機(jī)制.但同時(shí),Android也給我們提供了一個(gè)封裝好的組件--AsyncTask.利用AsyncTask,我們可以很方便的實(shí)現(xiàn)異步任務(wù)處理.AsyncTask可以在子線程中更新UI,也封裝簡(jiǎn)化了異步操作.使用線程,線程池處理異步任務(wù)涉及到了線程的同步,管理等問題.而且當(dāng)線程結(jié)束的時(shí)候還需要使用Handler去通知主線程來更新UI.而AsyncTask封裝了這一切,使得我們可以很方便的在子線程中更新UI.查看全部
-
AsyncTask默認(rèn)情況下會(huì)等待前一個(gè)線程執(zhí)行完畢后再執(zhí)行下一個(gè)線程,要取消該機(jī)制,可以讓AsyncTask和Activity的生命周期保持一致查看全部
-
doInbg查看全部
-
AsyncTask<Params,Progress,Result>是一個(gè)抽象類,通常用于被繼承,繼承AsyncTask需要指定如下三個(gè)泛型參數(shù): params:?jiǎn)?dòng)任務(wù)時(shí)輸入?yún)?shù)的類型。 progress:后臺(tái)任務(wù)執(zhí)行中,返回進(jìn)度值的類型。 Result:后臺(tái)執(zhí)行任務(wù)完成后,返回結(jié)果的類型。查看全部
-
使用AsynTask 方法的調(diào)用順序 1 耗時(shí)任務(wù)開始前的初始化 2 耗時(shí)任務(wù)異步處理 3 更新進(jìn)度條,需要在doInBackground中調(diào)用publishProgress(); 4 返回處理后的結(jié)果查看全部
-
AsyncTask注意事項(xiàng)查看全部
-
if(isCanceled()) break;查看全部
-
主線程暫停時(shí)AsyncTask也應(yīng)該停止查看全部
-
構(gòu)建AsyncTask子類的回調(diào)方法查看全部
-
構(gòu)建AsyncTask子類的參數(shù)查看全部
-
異步任務(wù)所需要實(shí)現(xiàn)的方法查看全部
-
AsyncTask<Params,Progress,Result> Params:啟動(dòng)任務(wù)時(shí)輸入?yún)?shù)的類型。 Progress:后臺(tái)任務(wù)執(zhí)行中返回進(jìn)度值的類型。 Result:后臺(tái)執(zhí)行任務(wù)完成后返回結(jié)果的類型。查看全部
舉報(bào)
0/150
提交
取消