從外部呼叫asynctask的cancel方法並不能停止乙個已經啟動的asynctask。這個cancel方法的作用與執行緒的interrupt方法相似,呼叫了乙個執行緒的interrupt方法之後執行緒仍然執行,但是如果該執行緒的run方法裡面呼叫過sleep的或者wait方法後,處於sleep或wait狀態,則sleep和wait立即結束並且丟擲interruptedexception異常。asynctask的cancel方法也一樣,如果在這個task的doinbackground方法中呼叫了sleep或wait方法,當在ui執行緒中呼叫了這個task例項的cancel方法之後,sleep或wait立即結束並且丟擲interruptedexception異常,但是如果捕獲該異常的**後面還有其他**,則這些**還會繼續執行。測試**如下:
package com.task;
import android.os.asynctask;
import android.os.bundle;
import android.util.log;
import android.view.view;
import android.view.view.onclicklistener;
import android.widget.button;
public class asynctasktest extends activity
});button endbutton=(button) this.findviewbyid(r.id.stoptask);
endbutton.setonclicklistener(new onclicklistener()
});button startsleepbutton=(button) this.findviewbyid(r.id.startthread_sleep);
final threadfortestsleep threadfortestsleep=new threadfortestsleep();
startsleepbutton.setonclicklistener(new onclicklistener()
});button endsleepbutton=(button) this.findviewbyid(r.id.stopthread_sleep);
endsleepbutton.setonclicklistener(new onclicklistener()
});button startwaitbutton=(button) this.findviewbyid(r.id.startthread_wait);
final threadfortestwait threadfortestwait=new threadfortestwait();
startwaitbutton.setonclicklistener(new onclicklistener()
});button endwaitbutton=(button) this.findviewbyid(r.id.stopthread_wait);
endwaitbutton.setonclicklistener(new onclicklistener()
});}
/*** asynctask
* @author alex**/
private class testasynctask extends asynctask
@override
protected double doinbackground(string... params)
log.i("testasynctask", "doinbackground is start");
for(int i=0;i<10000000;i++)
log.i("testasynctask", "sleep 1 is end");
try catch (interruptedexception e)
log.i("testasynctask", "sleep 2 is end and continue execute");
return a;
} protected void onpostexecute(double result)
}/**
* test sleep
* @author administrator**/
private class threadfortestsleep extends thread catch (interruptedexception e)
double a;
for(int i=0;i<10000000;i++)
log.i("threadfortestwait", "sleep end");}}
/*** test wait
* @author administrator**/
private class threadfortestwait extends thread
} catch (interruptedexception e)
log.i("threadfortestwait", "wait end");}}
}
AsyncTask和Handler非同步實現比較
一 asynctask asynctask是android提供的輕量級的非同步類,可以直接繼承asynctask,在類中實現非同步操作,並提供介面反饋當前非同步執行的程度 可以通過介面實現ui進度更新 最後反饋執行的結果給ui主線程。優點 簡單 快捷 過程可控。缺點 在使用多個非同步操作和並需要進行...
怎樣用cmd啟動停止服務
最近心血來潮,不喜歡用圖形介面來啟動服務,喜歡用cmd方式來解決,網上找來一篇文章,自己的想法立即實現,網路真是好啊!在cmd下可有兩種方法開啟,net和sc,net用於開啟沒有被禁用的服務,語法是 net start 服務名 net stop 服務名 用sc可開啟被禁用的服務,語法是 sc con...
怎樣用cmd啟動停止服務
最近心血來潮,不喜歡用圖形介面來啟動服務,喜歡用cmd方式來解決,網上找來一篇文章,自己的想法立即實現,網路真是好啊!在cmd下可有兩種方法開啟,net和sc,net用於開啟沒有被禁用的服務,語法是 net start 服務名 net stop 服務名 用sc可開啟被禁用的服務,語法是 sc con...