Android Studio:在主线活动的线程中调用方法

问题描述:

我想从主活动 的以下代码中调用pauseThread方法来停止计数的电流内核整数。一些示例代码将不胜感激。如果这是不可能的,他们是一种停止点击按钮的方法吗?也许暂停线程?Android Studio:在主线活动的线程中调用方法

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

第一,而(柜)应该足够,而不是同时(反==真) –

+0

秒你调用run方法另一个线程..我不理解。您可以在单次运行方法中完成所有任务,无需在运行方法中创建另一个线程 –

+0

我认为您的textView将更新得如此之快以至于用户无法查看该点的确切分数。 其次,使用Synchronized,以便您/用户/移动设备只能使用一次计数器/线程组件。 –

您应该使用一个线程来执行计算。调用另一个线程是没有用的。我给你简短的想法如何可以实现你的目标

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 当你要开始计算

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

,当你想例如停止线程调用线程的方法从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

另外,第二个线程使用一个处理程序来更新GUI。他们是更好的方法来做到这一点? – DavidPrabhu