2014-07-15 66 views
-2

我有螺紋在我的Android應用程序,它完成了它的任務,但它仍然不退出,當我再次運行它,我得到了錯誤的線程是已經活Android的Java線程不停止

我的線程

Thread mythreads = new Thread() 
    { 
     @Override 
     public void run() { 
     // do some work 

     // exit point  
} 
}; 

所以請我怎樣才能制止這種甚至線程完成它執行代碼,但是當我嘗試再次運行它,它給我的錯誤

java.lang.IllegalThreadStateException: Thread already started 

我試圖阻止它與我的threadkill功能的代碼,但沒有成功

public void killthread(Thread tname){ 
    try { 
     if (tname.isAlive()) { 
      Log.d("tag1","Thread is Alive"); 
      tname.interrupt(); 
      tname = null; 
     } 
    }catch (Exception e){ 
     e.printStackTrace(); 
    } 
} 
+0

或許你應該明白當一個線程被視爲[活着](http://stackoverflow.com/questions/17293304/when-is-a-java-thread-活着) – chancea

回答

1

線程對象只能啓動一次。如果你需要一個stop/interruptThread,然後想再次啓動它,你應該創建一個新的實例,並在其上調用start()

thread.interrupt(); 
thread = new YourThreadSubclass(); 
thread.start(); 

在你的情況,你正在做Thread mythreads = new Thread()所以它不應該是一個根本不存在問題,除非您在完成執行前明確地試圖阻止它。

創建匿名線程

new Thread() 
{ 
    public void run() { 
     //Your code 
    } 
}.start(); 
+0

所以你不認爲它會造成內存問題,因爲在特定的時間後,我想開始我的線程,並通過使用你的方法,我必須創建每次新的對象.......我的意思是它會使用更多內存? – user134929

+0

@ user134929它不應該,一旦你創建了線程的新實例,它就會標記舊的垃圾收集(除非你有對你的上下文的隱式引用)。 – zgc7009

+0

你能告訴我如何創建我的線程的新實例,我的意思是我開始我的線程mythreads.start();它完成並仍然活着,所以如何創建新實例?請幫助 – user134929