當前位置:首頁 » 安卓系統 » android線程被終止

android線程被終止

發布時間: 2022-08-12 09:44:27

Ⅰ android 線程執行完會主動銷毀嗎

不會自動銷毀,除非主動關閉它們。
一、銷毀的方法
1、通過線程
Hanlder是線程與Activity通信的橋梁,利用handler接收到任務線程,放到任務隊列裡面派對執行。
//調用該任務線程的run() 方法執行任務線程。
Handler updateBarHandler =new handler();
handler.post(Runnable Thread);
//移除handler里的任務線程,調用線程的stop()方法,銷毀線程。
handler.removecallbacks(Runnable Thread);
2、通過Timer
通過以下四種方法終止一個timer線程:
a)調用timer的cancle方法。可以從程序的任何地方調用此方法,甚至在一個timer task的run方法里;
b)讓timer線程成為一個daemon線程(可以在創建timer時使用new Timer(true)達到這個目地),這樣當程序只有daemon線程的時候,它就會自動終止運行;
c)當timer相關的所有task執行完畢以後,刪除所有此timer對象的引用(置成null),這樣timer線程也會終止;
d)調用System.exit方法,使整個程序(所有線程)終止。

Ⅱ Android 中如何停止一個線程

有三種方法可以結束線程:
1. 使用退出標志,使線程正常退出,也就是當run方法完成後線程終止
2. 使用interrupt()方法中斷線程
3. 使用stop方法強行終止線程(不推薦使用,可能發生不可預料的結果)
前兩種方法都可以實現線程的正常退出,也就是要談的優雅結束線程;第3種方法相當於電腦斷電關機一樣,是不安全的方法。

Ⅲ 線程正被終止

1.終止線程

線程終止後,其生命周期結束了,即進入死亡態,終止後的線程不能再被調度執行,以下幾種情況,線程進入終止狀態:
1) 線程執行完其run()方法後,會自然終止。
2) 通過調用線程的實例方法stop()來終止線程。

2. 測試線程狀態

可以通過Thread 中的isAlive() 方法來獲取線程是否處於活動狀態;線程由start() 方法啟動後,直到其被終止之間的任何時刻,都處於'Alive'狀態。

3. 線程的暫停和恢復

有幾種方法可以暫停一個線程的執行,在適當的時候再恢復其執行。
1) sleep() 方法
當前線程睡眠(停止執行)若干毫秒,線程由運行中狀態進入不可運行狀態,停止執行時間到後線程進入可運行狀態。

2) suspend()和resume()方法
線程的暫停和恢復,通過調用線程的suspend()方法使線程暫時由可運行態切換到不可運行態,若此線程想再回到可運行態,必須由其他線程調用resume()方法來實現。
註:從JDK1.2開始就不再使用suspend()和resume()。

3) join()
當前線程等待調用該方法的線程結束後, 再恢復執行.
TimerThread tt=new TimerThread(100);
tt.start();

public void timeout(){
tt.join();// 當前線程等待線程tt 執行完後再繼續往下執行
… }

Ⅳ android需要考慮結束線程嗎

  • Android終止線程的方法前提

    線程對象屬於一次性消耗品,一般線程執行完run方法之後,線程就正常結束了,線程結束之後就報廢了,不能再次start,只能新建一個線程對象。但有時run方法是永遠不會結束的。

  • 三種方法可以結束線程:

  1. 使用退出標志,使線程正常退出,也就是當run方法完成後線程終止。

  2. 使用interrupt()方法中斷線程。

  3. 使用stop方法強行終止線程(不推薦使用,可能發生不可預料的結果)。

  • 使用退出標志終止線程

    使用一個變數來控制循環,例如最直接的方法就是設一個boolean類型的標志,並通過設置這個標志為true或false來控制while循環是否退出。代碼如下:

  • 使用stop方法終止線程

    程序中可以直接使用thread.stop()來強行終止線程,但是stop方法是很危險的,就象突然關閉計算機電源,而不是按正常程序關機一樣,可能會產生不可預料的結果,不安全主要是:thread.stop()調用之後,創建子線程的線程就會拋出ThreadDeatherror的錯誤,並且會釋放子線程所持有的所有鎖。

其他注意事項:

前兩種方法都可以實現線程的正常退出,也就是要談的優雅結束線程,第3種方法相當於電腦斷電關機一樣,是不安全的方法。

Ⅳ 如何中斷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中如果activity被destroy。那麼在這個activity中start的thread會處於什麼樣的狀態

該線程如果沒有跑完run方法不會被關閉,當程序終止的時候線程會被結束掉。該thread發消息給handler後handler將繼續處理,是否會報錯在於是否調用了該activity,及該activity的內存是否被回收。activity調用onDestroy方法後內存並沒有被銷毀,而是處在了activity棧的底層,當內存不夠的時候,該activity的內存將被回收掉。所以在該activity的內存未回收,並且調用activity時不會報錯,在該activity的內存已經被回收,並調用該activity時會報錯。可以在該activity中加入標記變數來標記是否該activity被destroy,當該變數值為真時不處理該消息。

Ⅶ android 強行關閉線程

這個好辦,這里有兩個線程吧,線程A 線程mSender。
設:讓線程A,監視線程mSender
第一步:
在A中定義一個變數:ExecutorService transThread = Executors.newSingleThreadExecutor();
解釋:transThread 官方名稱是「單一線程池變數」,他是做什麼的呢,它就像我們給A的一塊賽車場,用來玩遙控賽車。
第二步:
在A中再定義一個變數: Future transPending;

解釋:transPending就像我給A一個用來控制遙控賽車的遙控器一樣
第三步:
在A中定義個線程mSender對象:
private final Runnable mSender = new Runnable() {

public void run() {
}};
解釋:這是你寫的對象,他就相當於我給A的一個遙控賽車。
第四步:
在A中添加如下語句:transPending = transThread.submit(mSender);

解釋:這一步就相當於把賽車(mSender)放入場地(第一步中我們定義的transThread),並且用遙控器「transPending」來控制他。
(註:這里你是否會有疑惑,我沒有寫"mSender.start()"之類的語句怎麼讓我的賽車跑起來啊(運行run()方法),放心,有了「transPending = transThread.submit(mSender);」這一步,賽車是自動跑起來的,也就是mSender會自動調用run的。)

第五步:
現在你可以用遙控器「transPending」干很多事情了
transPending.cancel(true);無論線程現在是否運行中,立刻終止。
transPending.cancel(false);當前線程若沒有運行(比如掛起狀態)就終止它。
transPending所做的不止這些。

Ⅷ Android如何停止線程的方式

一種是調用它裡面的stop()方法,另一種就是你自己設置一個停止線程的標記
(推薦這種)
如果使用Thread.stop方法停止線程,不能保證這個線程是否完整的運行完成一次
run方法;但是如果使用停止的標記位,那麼可以保正在真正停止之前完整的運行完
成一次run方法;第二中方式,但是對於麻煩的動作,解決方式是這一個全局變數,每個復雜的動作都進行判斷一下

Ⅸ 如何實現Android 中斷線程的處理

可以用interrupt()方法中斷線程,而線程是否已經中斷則用Thread.currentThread().isInterrupted()方法返回true/false判斷:
1、線程start()後馬上調用interrupt(),在進入run()時中斷標志已經被set on;
2、在處理sleep()可能拋出的InterruptedException時,再次中斷線程即可成功中斷;
3、注意interrupt()方法是set on 中斷標志的,interrupted()方法是判斷後並清除中斷標志的。

public class ThreadDemo extends Thread{
public static void main(String[] args){
try{
ThreadDemo thread = new ThreadDemo();
thread.start();
thread.sleep(100);

thread.interrupt(); //中斷線程
thread.sleep(100);

thread.printStr();
thread.interrupt(); //第三次中斷線程

thread.printStr();
thread.join();
}catch(InterruptedException e){
e.printStackTrace();
}
}

private void printStr(){
System.out.println("thread obj");
}

@Override
public void run() {
while(!Thread.currentThread().isInterrupted()) {
System.out.println("thread running");

try {
Thread.sleep(100);
}catch(InterruptedException e)
{
System.out.println("InterruptedException");
Thread.currentThread().interrupt(); //再次中斷線程
}
}

System.out.println("thread interrupted");
}
}
運行結果:
thread running
InterruptedException
thread interrupted
thread obj
thread obj

熱點內容
易拉罐壓縮機 發布:2025-01-17 21:25:35 瀏覽:923
在c語言是什麼意思啊 發布:2025-01-17 21:21:02 瀏覽:515
re0腳本 發布:2025-01-17 21:13:34 瀏覽:304
甜蜜家園密碼箱有什麼用 發布:2025-01-17 21:07:28 瀏覽:47
有教少兒編程 發布:2025-01-17 20:55:37 瀏覽:36
直播背腳本 發布:2025-01-17 20:50:18 瀏覽:409
ftp移動文件的mv命令 發布:2025-01-17 20:45:53 瀏覽:404
電腦上啥是伺服器 發布:2025-01-17 20:40:48 瀏覽:352
安卓手機怎麼連大眾車載 發布:2025-01-17 20:20:53 瀏覽:241
杭州做分布式存儲項目 發布:2025-01-17 20:06:10 瀏覽:872