1

我是新來的android開發。我有一個活動,我創建一個線程來加載圖像並在imageView上刷新它。線程運行一個「無限循環」。我還想在活動停止時停止線程。下面你可以看到我已經實現了什麼,但它拋出異常,線程繼續工作或應用程序崩潰。有什麼建議麼?Android線程interupt當活動銷燬不起作用

public class myActivity extends Activity{ 

    Thread tr; 


    .... onCreate(){ 
     bla bla bla 

     tr = new Thread(); 
     tr.start(); 
    } 

    .....onDestroy(){ 
     tr.interupt(); 
    } 

    bla bla bla 
} 

對不起,沒有寫完整的代碼,但我現在不在家裏,我有代碼。 我應該改變什麼才能讓它停下來好嗎?

我也嘗試了另一個技巧,我設置了一個公共靜態布爾和onDestroy我設置它爲假。

在線程的 「無限循環」 wokrs爲:

public static Boolean is = true; 

螺紋:

while (is == true).... 

的onDestroy:

is = false; 

所以,用這一招,因爲環會結束,線程在它結束操作時會被殺死嗎?

回答

3

線程在其run方法結束執行時結束。因此,如果通過將boolean設置爲false,然後控件達到run的末尾來中斷while循環,則該線程一定會完成。這實際上是停止java中的線程的推薦方式。你應該記住

很重要的一點是要始終設置由一個線程修改和讀取另一個爲volatile變量,以防止類似的可變緩存優化破壞您的代碼:

public static volatile boolean is = true; 
0

不要使用第一種方法解決您的問題,在Java線程文檔中不推薦使用此方法。你的第二種方法是完成這項工作的最佳方式。現在在第二種方法中,當您在onDestroy方法中將「is」變量設置爲false時,這將立即打破線程內的while循環。現在在while循環之後如果你寫了任何代碼,那麼它將繼續執行,一旦它到達線程代碼的末尾,線程將自行停止。

+0

感謝的人。但如果我有一個我不能使用第二種方法的情況會怎麼樣?我將如何停止線程? – Panos 2012-01-13 12:20:18

+1

我認爲你應該總是使用第二種方法。也許你可以通過線程上的java文檔來更清楚地瞭解爲什麼你不應該採取第一種方法。我想無論你用第一種方法做什麼都可以用第二種方法來完成 – 2012-01-13 12:35:55