2017-04-19 52 views
0

我有一個andoid(API 21)mainactivity在其中啓動一個線程。 按下按鈕我關閉線程和mainactivity。 這是一個很好的解決方案來中斷線程和關閉活動? 我嘗試調用如何糾正停止android主要活動等待線程?

mythread.cancel() 
finishAndRemoveTask(); 

但當mainactivity /程序關閉它崩潰,因爲線程仍然活着。

所以按鈕被點擊時,我試圖改變代碼,並寫上:

mythread.interrupt(); 
    finishAndRemoveTask(); 

這是一個很好的解決方案嗎? (我不知道我是否可以使用mythread.join(),因爲線程運行無限..

在OnCreate中創建和啓動線程

 myThread_read = new thread_read(handler_read); 
    //starting thread 
    myThread_read.start(); 

我知道我必須使用的Runnable但是這個代碼。繼承Thread類 線程代碼:

private class thread_read extends Thread { 
     Handler mHandler; 
     String logString ; 

     protected volatile boolean running; 

     /* constructor */ 
     thread_read(Handler h) { 
      mHandler = h; 
     } 

     public void start() 
     { 
      Logger.WriteString("thread_read", "Starting"); 
      running = true; 
      super.start(); 

     } 

     public void cancel() 
     { 
      Logger.WriteString("thread_read", "Stopping"); 
      running = false; 

     } 


     public void run() { 


      while (running) { 

       try { 
        Thread.sleep(500); // 500 msecs 
       } catch (InterruptedException e) { 
        Thread.currentThread().interrupt(); 
        break; 
       } 

       // do works 
       } 

      } 
     } 
    } 

回答

0

您可以嘗試舉辦來自的AsyncTask線程,然後嘗試停止活動如果需要暫時停止線程的工作完成後做到這一點。在asynctask的postExecute上。

也可以通過嘗試通過中斷()在活動的銷燬中停止線程的另一種方法。 您可以修改運行方法

而(中斷()){回報;}

可以參考以下鏈接 How to stop a running thread when Activity on destroy at Android?

0

你可以嘗試從的AsyncTask託管線程,然後嘗試停止活動。如果在作業完成後需要停止線程,請在asyncTask的postExecute上執行。

也可以通過嘗試通過中斷()在活動上的銷燬來停止線程的另一種方法。您可以修改運行方法

而(中斷()){回報;}

+0

你的意思是一個可以刪除mythread.interrupt();並在OnDestroy方法中插入 mythread.cancel() @Override public void onDestroy(){ mythread.cancel(); super.onDestroy(); } – Gab74

0

是Gab74 ..通過擴展的onDestroy()

添加在的OnDestroy的mythread.interupt和修改使用While(中斷()){return;}運行線程的方法 這是寫入邏輯,如果中斷,則退出線程。

相關問題