android停止線程
A. 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()沒有效果。
B. android開發中線程有幾種狀態,分別是哪些
【答案】:1)、新建狀態(New):新創建了一個線程對象。
2)、就緒狀態(Runnable):線程對象創建後,其他線程調用了該對象的start()方法。該狀態的線程位於可運行線程池中,變得可運行,等待獲取CPU的使用權。
3)、運行狀態(Running):就緒狀態的線程獲取了CPU,執行run()方法。
4)、阻塞狀態(Blocked):阻塞狀態是線程因為某種原因放棄CPU使用權,暫時停止運行。直到線程進入就緒狀態,才有機會轉到運行狀態。阻塞的情況分三種:
(一)、等待阻塞:運行的線程執行wait()方法,JVM會把該線程放入等待池中。
(二)、同步阻塞:運行的線程在獲取對象的同步鎖時,若該同步鎖被別的線程佔用,則JVM會把該線程放入鎖池中。
(三)、其他阻塞:運行的線程執行sleep()或join()方法,或者發出了I/O請求時,JVM會把該線程置為阻塞狀態。當sleep()狀態超時、join()等待線程終止或者超時、或者I/O處理完畢時,線程重新轉入就緒狀態。
5)、死亡狀態(Dead):線程執行完了或者因異常退出了run()方法,該線程結束生命周期。
當調用start方法的時候,該線程就進入就緒狀態。等待CPU進行調度執行,此時還沒有真正執行線程。
當調用run方法的時候,是已經被CPU進行調度,執行線程的主要任務。
C. android 如何讓service不在主線程中運行
調用者與服務綁定在一起就可以讓service不在主線程中運行。安卓是一種基於Linux內核的自由及開放源代碼的操作系統。
主要使用於移動設備,如智能手機和平板電腦,由美國Google公司和開放手機聯盟領導及開發。
系統信息
Android一詞的本義指機器人,同時也是Google於2007年11月5日宣布的基於Linux平台的開源手機操作系統的名稱,該平台由操作系統、中間件、用戶界面和應用軟體組成。Android一詞最早出現於法國作家利爾亞當在1886年發表的科幻小說未來夏娃中。
他將外表像人的機器起名為Android。Android的Logo是由Ascender公司設計的,誕生於2010年,其設計靈感源於男女廁所門上的圖形符號,於是布洛克繪制了一個簡單的機器人,它的軀干就像錫罐的形狀,頭上還有兩根天線,Android小機器人便誕生了。
其中的文字使用了Ascender公司專門製作的稱之為Droid的字體。Android是一個全身綠色的機器人,綠色也是Android的標志。
D. Android 中如何停止一個線程
有三種方法可以結束線程:
1. 使用退出標志,使線程正常退出,也就是當run方法完成後線程終止
2. 使用interrupt()方法中斷線程
3. 使用stop方法強行終止線程(不推薦使用,可能發生不可預料的結果)
前兩種方法都可以實現線程的正常退出,也就是要談的優雅結束線程;第3種方法相當於電腦斷電關機一樣,是不安全的方法。
E. android中怎麼讓線程長時間休眠線程休眠最長的安全時間是多少
設定一個Timer對象,時間到後觸發事件再給handler發消息處理就行,處理完重置timer的時間進入下一個循環即可。隨便用wait之類的土辦法的話很容易被系統判定為進程掛死然後被kill掉的。
F. 如何中斷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查詢操作,可以在查詢操作之後調用 來判斷是否需要結束線程。
G. 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時間之內調用。也就是子線程會睡一會,醒一會,睡一會,醒一會,要在子線程睡著的時候調用。
H. android:當Activity和Service 都被銷毀後,如何控制其中生成的線程
線程沒有被銷毀的,當Activity或者Service中還有活動線程的時候,垃圾回收器是不會回收銷毀Activity和Service對象的。舉個例子,你可以在Activity中啟動一個線程,在onDestroy中用System.out.print或者log輸出一個信息,然後通過按鈕調用finish方法,會發現點擊以後Activity會「關閉」,但只是不可見了,但是沒有調用onDestroy方法。除非你在onDestroy中關閉了線程才會關閉。
線程管理一般是通過一個布爾類型值保存其狀態,通過判斷它是否為空,一起來處理。這樣最簡單。
就是在onDestroy中處理的,你說沒有調用,是因為還有子線程在運行。在onDestroy中判斷線程狀態,正常關閉線程以後就行了。