简单的Android计时器游戏

时间:2014-07-22 14:27:39

标签: java android multithreading timer

我知道有一些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初学者,我怀疑问题是我的线程实现,但问题可能在其他地方,因为我不太熟悉编程风格或约定。

感谢您查看此内容!

1 个答案:

答案 0 :(得分:0)

您的playThread类,尽管名称不正确,但不会创建新线程。它在主GUI线程中运行,并包含一个挂起您的应用程序的循环。创建此类的实例,调用其run方法只是在主线程中运行该代码。您应该在该单独的线程中创建一个运行该实例的线程。