⑴ 如何終止 android線程池中的任務
Executor 提供了管理終止的方法,以及可為跟蹤一個或多個非同步任務執行狀況而生成 Future 的方法。
可以關閉 ExecutorService,這將導致其拒絕新任務。提供兩個方法來關閉 ExecutorService。shutdown() 方法在終止前允許執行以前提交的任務,而 shutdownNow() 方法阻止等待任務啟動並試圖停止當前正在執行的任務。在終止時,執行程序沒有任務在執行,也沒有任務在等待執行,並且無法提交新任務。應該關閉未使用的 ExecutorService 以允許回收其資源。
通過創建並返回一個可用於取消執行和/或等待完成的 Future,方法 submit 擴展了基本方法 Executor.execute(java.lang.Runnable)。方法 invokeAny 和 invokeAll 是批量執行的最常用形式,它們執行任務 collection,然後等待至少一個,或全部任務完成(可使用 ExecutorCompletionService 類來編寫這些方法的自定義變體)。
Executors 類提供了用於此包中所提供的執行程序服務的工廠方法。
⑵ Android 中如何在主線程中殺死子線程(非循環,沒有for,while語句)
主線程中一個flag標記為true時,用interupt()觸發子線程異常,異常里return處理,這是比較安全殺死線程的方法。
⑶ 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 thread join和stop的區別
stop() 方法是立即停止當前線程, 這樣停止的後果是導致stop後的語句無法執行, 有可能資源未釋放或者在同步塊中調用此方法會導致同步數據會不完整. 所以這樣的方法並不安全. 強列建議不要使用此函數來中斷線程。
interrupt()方法沒有stop那麼的粗暴,因為可以用catch捕捉到InterruptedException這個異常。一個線程處於了阻塞狀態(如線程調用了thread.sleep、thread.join、thread.wait以及可中斷的通道上的
I/O
操作方法後可進入阻塞狀態),方法調用處拋出InterruptedException異常,拋出異常是為了線程從阻塞狀態醒過來,並在結束線程前讓程序員有足夠的時間來處理中斷請求。
join() 方法作用是:「等待該線程終止」,這里需要理解的就是該線程是指的主線程等待子線程的終止。也就是在主線程調用了join()方法後面的代碼,只有等到子線程結束了才能執行
⑸ android 線程銷毀
Thread可以用destroy方法銷毀,但它不保證資源被釋放,所以只能用在無資源的情況下。
1.一般都建議自行控制代碼邏輯讓run()方法正常執行完
2.常用的方法包括可以被打斷(在代碼里檢測interrupted())、檢測狀態標識退出循環等
⑹ 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線程
當你在後台使用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開發 thread線程怎麼銷毀
thread有destroy方法。一般的,都是讓這個線程走到頭就自動銷毀了,要自己設計讓這個線程走完退出