我知道有一些Android计时器帖子,我无法真正看到他们缺少的东西。
用户按下按钮开始游戏,文本按照已经过的秒数更新,如果在8秒后按下按钮,则会显示祝贺消息。
public static class PlaceholderFragment extends Fragment {
public static long startTime;
public static int time;
public static boolean buttonClicked1;
public static boolean buttonClicked2;
public static boolean win;
public static TextView todd;
public static TextView tim;
public static Button bob;
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
win = false;
bob = (Button)rootView.findViewById(R.id.button);
tim = (TextView)rootView.findViewById(R.id.message);
todd = (TextView)rootView.findViewById(R.id.timer);
startTime = System.currentTimeMillis();
time = 0;
buttonClicked1 = false;
buttonClicked2 = false;
bob.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View arg0) {
if(!buttonClicked1){
buttonClicked1 = true;
bob.setText("Push Here");
play();
}
else if(buttonClicked1) //Has game started
{
if(time>8)
buttonClicked2 = true;
}
}
});
return rootView;
}
public void play(){
playThread paul = new playThread();
paul.run();
}
public void winner(){
tim.setText("Congratulations");
}
public boolean checkWin(){
return buttonClicked2 ? true : false;
}
public void updateTime(){
if((System.currentTimeMillis() - startTime) % 1000 > 0){
startTime = System.currentTimeMillis();
time++;
}
todd.setText(""+time);
}
private class playThread implements Runnable{
public void run(){
System.out.println("Thread running");
while(!win){
updateTime();
win = checkWin();
winner();
}
}
}
}
}
我决定在阅读this后实现Runnable而不是为playThread私有类扩展Thread。
点击开始按钮后,游戏变得没有响应,其中的文本不会变为“按此处”。
我当然是一个完整的Android初学者,我怀疑问题是我的线程实现,但问题可能在其他地方,因为我不太熟悉编程风格或约定。
感谢您查看此内容!
答案 0 :(得分:0)
您的playThread
类,尽管名称不正确,但不会创建新线程。它在主GUI线程中运行,并包含一个挂起您的应用程序的循环。创建此类的实例,调用其run方法只是在主线程中运行该代码。您应该在该单独的线程中创建一个运行该实例的线程。