2012-03-16 98 views
2

我有一個線程類,它在某個活動的onCreate中出現。如何停止或破壞正在運行的線程

class MyThread extends Thread 
{ 
     void run() 
     { 
      //My code which takes time. 
     } 
} 

//-------------------------- To run the thread 
MyThread mThread = new MyThread(); 
mThread.start(); 

在一些外部事件我需要停止/銷燬當前正在運行的線程。
然後我創建一個MyThread的新副本,並在新線程上調用start函數來運行它。

但我不能銷燬/停止以前的運行線程。
是否有任何API可以用來銷燬正在運行的線程。

回答

6

你不能破壞......只有Android將停止線程時需要..你不能停止或摧毀它..而不是嘗試這樣的..

class MyThread extends Thread 
{ 
    void run() 
    { 
while(bool){ 
     //My code which takes time. 
    } 
} 
} 

// --------------------------要運行的線程

MyThread mThread = new MyThread(); 
    mThread.start(); 

現在當u要停止不知所云,改變布爾值設置爲false

bool=false; 

現在你的代碼犯規運行...,你就可以開始新的線程...

4

Thread.interrupt()方法是停止正在運行的線程的可接受方式,但有一些實現細節在你身上:如果你的線程正在執行IO(或其他任何可能拋出InterruptedException的東西),那麼確保關閉它是你的責任您在停止線程之前打開的任何資源。

This page指出爲什麼某些Java早期版本中存在的線程功能被棄用,爲什麼Thread.destroy()從未實際實現。

-1

嘗試是這樣的..

class MyThread extends Thread 
{ 
     void run() 
     { 
      //My code which takes time. 
     } 
} 

//-------------------------- To run the thread 
MyThread mThread = new MyThread(); 
mThread.start(); 

// PERFORM ALL YOUR OPERATIONS HERE.. 
mThread.destroy(); 
+2

不要使用Thread.stop,Thread.suspend和Thread.resume http://docs.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html .destroy()甚至更多的是' @Deprecated public void destroy(){throw new NoSuchMethodError(「Thread.destroy()」); }在Android – zapl 2012-03-16 12:50:41

+0

中停止並銷燬已棄用的函數。你是否說我需要實現smiler功能? – User7723337 2012-03-16 12:55:44

2

您可以使用AsyncTask insted的主題,因爲它是已知Painless Threading在android中。一旦你實現了,你不需要麻煩線程管理。

AsyncTask可以輕鬆處理,處理UI非常簡單。