暂停CountDownTimer,而另一个正在运行在Android Studio,然后恢复它时,另一个结束



我的程序中有两个CountDownTimers:一个4秒的,一个24秒的。我希望较长的计时器暂停每4秒较短的计时器正在运行。当短计时器结束时,长计时器开始倒计时。下面是两个计时器的代码:

final CountDownTimer loop = new CountDownTimer(4000, 1000) {
                @Override
                public void onTick(long millisUntilFinished) {
                }
                @Override
                public void onFinish() {
                    number.setVisibility(View.GONE);
                    final TextView prompt = (TextView) findViewById(R.id.prompt);
                    prompt.setVisibility(View.VISIBLE);
                    prompt.setText(" Enter the number");
                    final EditText input = (EditText) findViewById(R.id.enterAnswer);
                    input.setVisibility(View.VISIBLE);
                    input.setOnKeyListener(new View.OnKeyListener() {
                        @Override
                        public boolean onKey(View v, int keyCode, KeyEvent event) {
                            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                                switch (keyCode) {
                                    case KeyEvent.KEYCODE_ENTER:
                                        Editable answer = input.getText();
                                        int finalAnswer = Integer.parseInt(String.valueOf(answer));
                                        int finalLoadG1 = Integer.parseInt(String.valueOf(number.getText()));
                                        input.setVisibility(View.GONE);
                                        prompt.setVisibility(View.GONE);
                                        if (finalAnswer == finalLoadG1) {
                                            score++;
                                        }
                                        number.setVisibility(View.VISIBLE);
                                        int loadG1 = generateG1.nextInt(1000000)+10000;
                                        number.setText(""+loadG1);
                                        input.getText().clear();
                                        start();
                                        return true;
                                    default:
                                }
                            }
                            return false;
                        }
                    });
                }
                }.start();

            new CountDownTimer(24000, 1000) {
                @Override
                public void onTick (long millisUntilFinished) {
                }
                @Override
                public void onFinish() {
                    TextView result = (TextView) findViewById(R.id.outcome);
                    result.setText("Score: "+ score);
                    TextView prompt = (TextView) findViewById(R.id.prompt);
                    prompt.setVisibility(View.GONE);
                    final EditText input = (EditText) findViewById(R.id.enterAnswer);
                    input.setVisibility(View.GONE);
                    loop.cancel();
                    number.setVisibility(View.GONE);
                }
            }.start();

我考虑命名较长的计时器,然后将name.pause()放在较短计时器的onTick中。问题是,由于较长的计时器写在较短的计时器之后,因此在初始化之前无法识别它的名称。Java按顺序读取,对吧?或者这是所有的语言?

如果有人能帮助我,我将不胜感激,提前感谢。

import java.util.Vector;
class LongTimer extends Thread {
    static final int MAXQUEUE = 5;
    private Vector messages = new Vector();
        @Override
        public void run() {
            try {
                while (true) {
                    putMessage();
                    sleep(4000);
                }
            } catch (InterruptedException e) {
            }
        }
        private synchronized void putMessage() throws InterruptedException {
            while (messages.size() == MAXQUEUE) {
                wait();
            }
            messages.addElement(new java.util.Date().toString());
            System.out.println("put message");
            notify();
            //Later, when the necessary event happens, the thread that is running it calls notify() from a block synchronized on the same object.
        }
        // Called by short timer
        public synchronized String getMessage() throws InterruptedException {
            notify();
            while (messages.size() == 0) {
                wait();//By executing wait() from a synchronized block, a thread gives up its hold on the lock and goes to sleep.
            }
            String message = (String) messages.firstElement();
            messages.removeElement(message);
            return message;
        }
    }
    class ShortTimer extends Thread {
        LongTimer producer;
        ShortTimer(LongTimer p) {
            producer = p;
        }
        @Override
        public void run() {
            try {
                while (true) {
                    String message = producer.getMessage();
                    System.out.println("Got message: " + message);
                    //sleep(200);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        public static void main(String args[]) {
            LongTimer producer = new LongTimer();
            producer.start();
            new ShortTimer(producer).start();
        }        
    }

相关内容

最新更新