android線程的終止
Ⅰ android如何終止一個正在運行的子線程
線程像這樣:
Thread{
boolean flag = fase;
run(){
while(!flag){
}
}
}
Thread t = new Thread();
t.start();
-----------------------------------------------------
要終止循環,只需要這樣
t.flag=true;
================================================
還有一種方式 線程像這樣:
Thread{
run(){
while(true){
Thread.sleep(xxxx);
}
}
}
Thread t = new Thread();
t.start();
--------------------------------------------
要終止循環,只需要這樣
t.interrupte();
但是這里要注意調用的時機,要在子線程執行了run方法裡面的sleep(xxxx)後xxxx時間之內調用。也就是子線程會睡一會,醒一會,睡一會,醒一會,要在子線程睡著的時候調用。
Ⅱ android需要考慮結束線程嗎
Android終止線程的方法前提
線程對象屬於一次性消耗品,一般線程執行完run方法之後,線程就正常結束了,線程結束之後就報廢了,不能再次start,只能新建一個線程對象。但有時run方法是永遠不會結束的。
三種方法可以結束線程:
使用退出標志,使線程正常退出,也就是當run方法完成後線程終止。
使用interrupt()方法中斷線程。
使用stop方法強行終止線程(不推薦使用,可能發生不可預料的結果)。
使用退出標志終止線程
使用一個變數來控制循環,例如最直接的方法就是設一個boolean類型的標志,並通過設置這個標志為true或false來控制while循環是否退出。代碼如下:
使用stop方法終止線程
程序中可以直接使用thread.stop()來強行終止線程,但是stop方法是很危險的,就象突然關閉計算機電源,而不是按正常程序關機一樣,可能會產生不可預料的結果,不安全主要是:thread.stop()調用之後,創建子線程的線程就會拋出ThreadDeatherror的錯誤,並且會釋放子線程所持有的所有鎖。
其他注意事項:
前兩種方法都可以實現線程的正常退出,也就是要談的優雅結束線程,第3種方法相當於電腦斷電關機一樣,是不安全的方法。
Ⅲ android中的線程該怎麼停掉
線程不要直接停止,那樣會產生線程不安全的。
你要配合Handler來用。
當下載完之後調用handler.sendEmptyMessage()方法。
或者你換成AsyncTask來實現線程下載。
Ⅳ 如何中斷Android線程
當你在後台使用Thread或者AsyncTask來處理一些耗時的操作時,可能想要對這些線程加以控制,其中包括中斷線程。
很多情況下,當用戶啟動程序的時候,一個後台運行的線程會同時啟動去載入內容。但是,當用戶離開程序時,線程應該被打斷,因為現在用戶已經不再關注程序了,同時也不再關注線程處理的結果,而線程是要佔用系統的資源的,如果不及時中斷線程,會導致系統資源的浪費。
除此之外,你可以使用
Thread.interrupt()或者AsyncTask.cancel()
方法,但是這不會馬上中斷線程,因此,只能在自己的線程中實現中斷並退出。
在許多情況下,後台運行的線程都有一個主循環,因此你可以在循環中判斷線程是否被中斷,若被中斷,則退出循環,從而結束進程。例如一個線程下載線程,可以通過
isInterrupted()
方法判斷當前線程是否被中斷。
thread=newThread(){publicvoidrun(){while(!isInterrupted()&&hasMoreDataToDownload()){
downloadAndWriteSomeMore();}if(isInterrupted()){
();}else{callBack();}}}thread.start();
thread.interrupt();
如果線程被中斷,則調用
()
函數,刪除沒有完成下載的文件。當線程沒有被中斷,則調用callBack()函數,可以使用handler發送下載完成的信息。
如果你的線程中沒有這樣一個主循環,例如只是執行一個很耗時的SQL查詢操作,可以在查詢操作之後調用
來判斷是否需要結束線程。
Ⅳ android怎麼停止子線程
一種是調用它裡面的stop()方法,另一種就是你自己設置一個停止線程的標記 (推薦這種)
如果使用Thread.stop方法停止線程,不能保證這個線程是否完整的運行完成一次
run方法;但是如果使用停止的標記位,那麼可以保正在真正停止之前完整的運行完
成一次run方法;第二中方式,但是對於麻煩的動作,解決方式是這一個全局變數,每個復雜的動作都進行判斷一下
Ⅵ Android怎麼結束一個線程
在Java語言中,安全結束線程的方法就是「讓線程的自身流程執行完」。
出現「僵屍線程」的原因:1.線程在死循環中執行。2.線程阻塞。
很明顯,你的ReadHandlerThread線程發生了線程阻塞。
dis.readFully(b),你在這里調用了一個阻塞方法,由於socket的另一端一直沒有發送數據,ReadHandlerThread線程一直阻塞在了這里,等待接收完136位元組的數據。136位元組沒有接收完,readFully方法將一直處於阻塞狀態。
解決方法,設置socket的等待超時值,而不是無限等待。
Ⅶ android thread 後台線程 怎麼設置隨著主線程的結束而結束
關於線程的結束有以下幾點:
1.不要手動調用stop方法強行終止一個線程,這種方式不安全。
通過幫助文檔,我們可以知道,Android的線程類本身就提供了一些公共方法去結束線程。
final void stop()
This method is deprecated. because stopping a thread in this manner is unsafe and can leave your application and the VM in an unpredictable state
但是,通過說明我們可以看到,這些方法Android本身都是不推薦使用的,通過這種方式結束線程是不安全的。
2.線程里run函數短,執行完後線程會自行銷毀,不用手動去終止。
3.手動停止,通過在run里設置標志先停止運行,再調用Thread.interrupt();注意,在run沒有停止時調用.interrupt()沒有效果。
Ⅷ Android 中如何關閉線程
在android中開啟的線程用Thread.stop()來關閉是不會真正關閉的,當我們再次start線程的時候,會產生異常:Thread is already started. 針對這個問題可以在線程的run方法里,加一個判斷標志。例如: class TestThread extends Thread{ public void run(){ while(isTrue){ //做你要做的事。}}}在需要關閉的時候,將flag置為false: isTrue=false;並且將運行的線程對象掛起然後置為null(假設開啟的線程對象為mTestThread) : mTestThread.interrupt(); mTestThread=null; 再次用到的時候進行如下處理即可: if(mTestThread==null){
Ⅸ Android 中如何停止一個線程
有三種方法可以結束線程:
1. 使用退出標志,使線程正常退出,也就是當run方法完成後線程終止
2. 使用interrupt()方法中斷線程
3. 使用stop方法強行終止線程(不推薦使用,可能發生不可預料的結果)
前兩種方法都可以實現線程的正常退出,也就是要談的優雅結束線程;第3種方法相當於電腦斷電關機一樣,是不安全的方法。