Android在后台工作?

时间:2017-05-25 10:28:19

标签: java android timer

我正在尝试使用Android Studio开发一个简单的计时器。一切正常,但我的问题是:

当我使用主页按钮关闭应用程序或锁定显示器时,应用程序将停止。

我读到了有关服务的信息,但有没有更简单的方法告诉应用程序在应用程序最终关闭之前不要停止?

一些帮助代码:

    //Hier wird runnable definiert. Sobald ein Handler gestartet wird mit dem Parameter runnable, wird diesse Methode ausgeführt.
    runnable = new Runnable() {
        //Setzt den Text der timeView auf timeInt und zählt timeInt hoch. (SOLL EIGENTLICH RUNTER ZÄHLEN)
        @Override
        public void run() {
            running = true;
            if (runde == 0) subtitle.setText("Exercise! Round " + realRound + " of " + satzAnz);
            timeView.setText(timeInt.toString());
            timeInt--;
            if (timeInt == 3 || timeInt == 1 || timeInt == 0) v.vibrate(500);
            if (timeInt == 2) {
                countdown.start();
                v.vibrate(500);
            }
            if (timeInt < 0 && (runde % 2 == 0)) {
                v.vibrate(1000);
                timeInt = pauseSec;
                subtitle.setText("Break...");
                runde++;
            }
            if (timeInt < 0 && (runde % 2 != 0)) {
                v.vibrate(1000);
                timeInt = satzdauerSec;
                realRound++;
                runde++;
                subtitle.setText("Exercise! Round " + realRound + " of " + satzAnz);
            }
            if (runde == (satzAnz*2)-1) {
                running = false;
                handler.removeCallbacks(runnable);
                timeInt = 0;
                showButton(start, false);
                showButton(stop, false);
                runde = 0;
                realRound = 0;
                v.vibrate(2000);
                subtitle.setText("Finish!");
            } else handler.postDelayed(this, 1000);
        }
    };

    //Dierser Runnable ist für den Anfangscountdown zuständig.
    countdownAtStart = new Runnable() {
        @Override
        public void run() {
            runningCountdown = true;
            if (startCountdown == 2 || startCountdown == 1 ) v.vibrate(500);
            if (startCountdown == 3) {
                countdown.start();
                v.vibrate(500);
            }
            if (startCountdown > 0) {
                timeView.setText(startCountdown.toString());
                startCountdown--;
                handler.postDelayed(this, 1000);
            } else {
                timeView.setText(startCountdown.toString());
                v.vibrate(1000);
                startCountdown = 15;
                runningCountdown = false;
                handler.removeCallbacks(countdownAtStart);
            }
        }
    };



    //Diese Methode beschreibt, was passiert wenn der Start-Button betätigt wird.
    start.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showButton(start, false);
            showButton(stop, true);
            showButton(reset, true);
            startService(intent);
            pause.setEnabled(false);
            satzdauer.setEnabled(false);
            satz.setEnabled(false);
            pauseSec = (Integer) pause.getSelectedItem();
            satzdauerSec = (Integer) satzdauer.getSelectedItem();
            satzAnz = (Integer) satz.getSelectedItem();
            timeInt = satzdauerSec;
            subtitle.setText("Start Countdown");
            handler.postDelayed(countdownAtStart, 0);
            handler.postDelayed(runnable, 16000);
        }
    });

    //Diese Methode beschreibt, was passiert wenn der Stop-Button betätigt wird.
    stop.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            handler.removeCallbacks(countdownAtStart);
            handler.removeCallbacks(runnable);
            Boolean runningCountdown = false;
            Boolean running = false;
            showButton(start, true);
            showButton(stop, false);
        }
    });

    //Diese Methode beschreibt, was passiert wenn der Reset-Button betätigt wird.
    reset.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            timeInt = satzdauerSec;
            timeView.setText(timeInt.toString());
            handler.removeCallbacks(countdownAtStart);
            handler.removeCallbacks(runnable);
            showButton(start, true);
            showButton(stop, false);
            showButton(reset, false);
            pause.setEnabled(true);
            satzdauer.setEnabled(true);
            satz.setEnabled(true);
            startCountdown = 15;
            subtitle.setText("get ready");
            Boolean runningCountdown = false;
            Boolean running = false;
        }
    });

}

1 个答案:

答案 0 :(得分:0)

您可以使用AsyncTask。即使您的应用程序转到后台,它也不会停止。它只会在其工作完成或明确取消后停止。