0
0

Добрый день. Таймер был создан с помощью Thread. При повороте экрана он не сбрасывается. Почему так происходит? Ведь активность должна удалятся? Из-за того что Thread это не главный поток? Верно ли такое решение или нужно использовать только Handler

package com.example.timer;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

    private TextView textViewTimer;

    private int seconds = 0;
    private int minutes = 0;
    private int hours = 0;

    private boolean timerIsRun = false;

    private Thread timer = new Thread();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textViewTimer = findViewById(R.id.textViewtimer);
        textViewTimer.setText(String.format("%d:%02d:%02d", hours, minutes, seconds));

    }

    public void onClickStartTimer(View view) {

        if (timerIsRun){
            timer.interrupt();

            seconds = 0;
            minutes = 0;
            hours = 0;

            timerIsRun = false;
            
            timer = onThreading();

        } else if (!timerIsRun){
            timer = onThreading();
        }

        timer.start();
    }

    public void onClickStopTimer(View view) {
        timerIsRun = false;
        timer.interrupt();
    }

    public void onClickResetTimer(View view) {
        timerIsRun = false;
        onReseting();
        timer.interrupt();
    }

    public void onReseting(){
        seconds = 0;
        minutes = 0;
        hours = 0;
        textViewTimer.setText(String.format("%d:%02d:%02d", hours, minutes, seconds));
    }

    public Thread onThreading(){

        Thread timerThread = new Thread(new Runnable() {
            @Override
            public void run() {

                timerIsRun = true;

                try {
                    while (timerIsRun) {
                        while (seconds <= 60 && timerIsRun) {
                            textViewTimer.setText(String.format("%d:%02d:%02d", hours, minutes, seconds));
                            seconds++;
                            Thread.sleep(1000);
                        }
                        if (timerIsRun){
                            seconds = 0;
                            minutes++;

                            if (minutes == 60) {
                                minutes = 0;
                                hours++;
                            }
                        }
                    }

                } catch (Exception e) {}
            }
        });

        return timerThread;
    }
}


student_DMrqlIeC
3 years ago






Интерестно, а на воюпросы вообще отвечвают?

Сергей Колиниченко
3 years ago

Дело в том, что у меня тот же эффект, хотя код один в один, как у лектора,..., но при повороте таймер не сбрасывается...пытался понять...гуглил...но я еще слишком чайник в этом вопросе...

Сергей Колиниченко
3 years ago

2 ответов