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