2016-09-19 4 views
1

メインアクティビティ の下のコードでpauseThreadメソッドを呼び出して、currentscore整数のカウントを停止したいとします。いくつかの例のコードは高く評価されます。それができない場合は、ボタンをクリックするとカウントを止める方法ですか?おそらくスレッドを一時停止しますか?Androidスタジオ:メインアクティビティのスレッドでメソッドを呼び出す

public class ScoreThread extends Thread { 

private boolean counter; 
private int currentscore; 
Handler scorehandler = new Handler(); 
private TextView playerscore; 

ScoreThread(TextView v, Boolean b) { 
    playerscore = v; 
    counter = b; 
} 

public void pauseThread() throws InterruptedException { 
    counter = false; 
} 

public void resumeThread() throws InterruptedException { 
    counter = true; 
} 


public void run() { 
    currentscore = 0; 
    new Thread(new Runnable() { 
     @Override 
     public void run() { 
      while(counter == true) { 
       currentscore = currentscore + 1; 

       scorehandler.post(new Runnable() { 
        @Override 
        public void run() { 
         playerscore.setText("" + currentscore); 
        } 
       }); 
       try{ Thread.sleep(50);} catch (InterruptedException e) {e.printStackTrace();} 
      } 
     } 
    }).start(); 
} 
} 
+0

まずしばらく(カウンタ)の代わりに使用すると、私はそうでない。.. runメソッド内の別のスレッドを呼び出している間(カウンタ== true)を –

+0

秒の十分なはず使用わかる。あなたは一回の実行方法であなたのすべてのタスクを実行することができます実行メソッドで別のスレッドを作成する必要はありません –

+0

私はあなたのtextViewは、ユーザーがそのポイントの正確なスコアを見ることができないほど速く更新されると思う。 秒のうち、カウンタ/スレッドコンポーネントを1回だけyou/user/mobileで使用できるようにSynchronizedを使用してください。 –

答えて

0

計算を実行するスレッドを1つ使用してください。別のスレッドを呼び出すことは役に立たない。私はあなたが計算

Score score = new Score(); 
     score.start(); 

を開始したいとしたときに、例えば、スレッドを停止する場合は、あなたのmainactivity であなたの目標

class Score extends Thread { 

    private boolean counter; 
    private int currentscore = 0; 

    public void stopThread() throws InterruptedException { 
     counter = false; 
    } 

    @Override 
    public void run() { 
     while (counter) { 
      currentscore = currentscore + 1; 
      //Do rest of your work 
      try { 
       Thread.sleep(50); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

} 

を達成することができますどのように簡単なアイデアを与えていますmainactivityからスレッドのメソッドを呼び出して、次の

try { 
      //  your stop event 
      score.stopThread(); 
     } catch (InterruptedException ex) { 
      Logger.getLogger(NewClass.class.getName()).log(Level.SEVERE, null, ex); 
     } 
+0

ありがとうございます。私が知らなかったのは文法です。これは正解です。 – DavidPrabhu

+0

@DavidPrabhuうれしいことです:) –

+0

また、2番目のスレッドはGUIを更新するためにハンドラを使います。彼らはこれを行うより良い方法ですか? – DavidPrabhu

関連する問題