2017-04-19 6 views
0

私はスレッドを開始するためのアンドロイド(API 21)主な活動をしています。 ボタンを押すとスレッドとメインアクティビティが閉じます。 これは、スレッドを中断してアクティビティを終了するのに適したソリューションですか? 私はスレッドを待っているアンドロイドの主な活動を停止する方法を修正するには?

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に。

また、別の方法として、アクティビティの破棄でinterrupt()によってスレッドを停止することができます。 あなたが

しばらく(中断())としてrunメソッドを変更することができます。

あなたはasynctaskからスレッドをホスティングしてみてください、その後に試すことができ、以下のリンク How to stop a running thread when Activity on destroy at Android?

0

を指すことができます{リターン}アクティビティを停止します。ジョブが完了した後にスレッドを一度停止する必要がある場合は、asynctaskのpostExecuteで実行します。

また、別の方法として、アクティビティの破棄でinterrupt()によってスレッドを停止することができます。 {リターン;}もし

一方(中断())として実行方法を変更することができ

+0

これは、mythread.interrupt()を削除できることを意味します。 OnDestroyメソッドで mythread.cancel()を挿入しますか? @Override public void onDestroy(){ mythread.cancel(); super.onDestroy(); } – Gab74

0

はいGab74 .. onDestroy()

を拡張することによりondestroyでmythread.interuptを追加および変更while(interrupt)()){return;}でスレッドのメソッドを実行する これは、中断された場合はロジックを書き、スレッドを終了します。

関連する問題