課程
/移動(dòng)開發(fā)
/Android
/Android必學(xué)-AsyncTask基礎(chǔ)
如果要在第一個(gè)加載圖片的例子中取消線程,應(yīng)該怎么做呢?怎么試都沒成功。。。
2016-05-30
源自:Android必學(xué)-AsyncTask基礎(chǔ) 3-2
正在回答
}
@Overrideprotected void onPreExecute() { ? ?if (isCancelled()){ ? ? ? ?return; ? ?} ? ?super.onPreExecute(); ? ?progressBar.setVisibility(View.VISIBLE);}
在預(yù)處理的時(shí)候判斷一下AsyncTask狀態(tài)就可以了
Bingo_ang 提問者
你的isCancelled()方法又不是在一個(gè)循環(huán)里面或者回調(diào)監(jiān)聽可以隨時(shí)影響將流轉(zhuǎn)換為bitmap,所以肯定不行,也就是說你取消按鈕還沒按,已經(jīng)走過了你的isCancelled()判斷方法了
FINE_Android 回復(fù) Bingo_ang 提問者
@Override ??protected?Bitmap?doInBackground(String...?params)?{ ???//?獲取傳遞進(jìn)來的參數(shù):?因?yàn)橹粋鬟M(jìn)一張圖片,所以只用取出數(shù)組params的第0位內(nèi)容 ???String?url?=?params[0]; ???Bitmap?bitmap?=?null; ???URLConnection?connection;//?定義網(wǎng)絡(luò)連接對(duì)象 ???InputStream?is;//?用于獲取數(shù)據(jù)的輸入流對(duì)象 ???//?將URL解析成bitmap對(duì)象(此為耗時(shí)操作,所以在doInBackground中) ???try?{ ????//?將url傳進(jìn)去,獲取網(wǎng)絡(luò)連接對(duì)象 ????connection?=?new?URL(url).openConnection(); ????//?獲取輸入流接對(duì)象 ????is?=?connection.getInputStream(); ????//?將輸入流is放到緩存器中 ????BufferedInputStream?bis?=?new?BufferedInputStream(is); ????Thread.sleep(9000);//?人為阻礙加載 ????//?一旦監(jiān)測(cè)到cancel,則立即返回 ????if?(isCancelled())?{ ?????Log.v("ang",?"殺死"); ?????return?null;//??。。。。。。。。。。。。。。。。。。?????} ????Log.v("ang",?"沒有跳過"); ????//?將bis傳入,通過decodeStream把輸入流解析成bitmap ????bitmap?=?BitmapFactory.decodeStream(bis); ????//?關(guān)閉輸入流 ????is.close(); ????bis.close(); ???}?catch?(MalformedURLException?e)?{ ????e.printStackTrace(); ???}?catch?(IOException?e)?{ ????e.printStackTrace(); ???} ???return?bitmap;//?返回的是解析得到的bitmap對(duì)象 ??}
舉報(bào)
了解Android中AsyncTask的使用方法,掌握異步線程的使用
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2016-06-04
protected void onPause() {
? ?super.onPause();
? ?if (task!=null&&task.getStatus()==AsyncTask.Status.RUNNING){
? ? ? ?task.cancel(true);
? ?}
}
@Override
protected void onPreExecute() {
? ?if (isCancelled()){
? ? ? ?return;
? ?}
? ?super.onPreExecute();
? ?progressBar.setVisibility(View.VISIBLE);
}
在預(yù)處理的時(shí)候判斷一下AsyncTask狀態(tài)就可以了
2016-06-07
你的isCancelled()方法又不是在一個(gè)循環(huán)里面或者回調(diào)監(jiān)聽可以隨時(shí)影響將流轉(zhuǎn)換為bitmap,所以肯定不行,也就是說你取消按鈕還沒按,已經(jīng)走過了你的isCancelled()判斷方法了
2016-06-07