Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android終止無限循環線程和程序退出時銷毀線程

android終止無限循環線程和程序退出時銷毀線程

編輯:關於Android編程

android,啟動了一個子線程,這個子線程是一個死循環,不成的打印“Hello”。

現在要實現點擊一個Button,讓這個子線程終止,用什麼方法啊?

stop()不起作用,destroy()有異常,Handler貌似也解決不了,因為是一個線程。。。

 

答案如下:

線程像這樣: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程序退出後,線程停止的問題

 www.2cto.com

經過測試:以下方法可以終止線程。

方法一:System.exit(0);

方法二:android.os.Process.killProcess(android.os.Process.myPid())//關閉時稍微有些延遲

 

0

一個關於Android程序退出後,線程停止的問題10

在Android的程序中,UI線程是主線程

理論上來講,Activity調用了finish方法後,主線程就終止了

那麼其上的子線程也應該是停止

 


但是通過測試,發現並不是這樣

finish退出程序後,子線程還在後台跑

必須用DDMS停止該線程才行

 


那麼如何在程序退出時,停止所有開啟的子線程呢?

我想到了兩個方案:

 


一,在退出時,改變線程內循環的標識符

while(isRun){...}

將isRun置為false,則打破了循環,線程終止

 


二,不采用while(isRun){...}這樣的循環方式

而利用Android提供的Handler機制來完成

Java代碼 

//將一個線程立即加入線程隊列,並執行它的[color=red]run[/color]方法 
handler.post(test); 
 
Runnable test = new Runnable(){ 
  public void run(){ 
    //以上代碼略 
    //延遲1000毫秒,執行這個線程的[color=red]run[/color]方法 
    handler.postDelayed(test,1000); 
  } 

 
//退出時 
//即從線程隊列中移除該線程,不再被執行 
handler.removeCallbacks(test); 

 

如紅字標注,確實是調用的run方法,所以其實並未真正的啟動一個子線程

 

 

 


 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved