Android задача студии Timer вылетает приложение при запуске - PullRequest
0 голосов
/ 09 апреля 2020
public class MainActivity extends AppCompatActivity {



private TextView timerTextView;
private Button pauseStartBtn;
private Button resetBtn;
private Button productiveBtn;
private CountDownTimer countDownTimer;


private Boolean run;
Timer timer = new Timer();
private long timeMS = 0;
private long seconds = 0;
private long minutes = 0;


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

    timerTextView = findViewById(R.id.timerTextView);
    pauseStartBtn = findViewById(R.id.pauseStartBtn);
    resetBtn = findViewById(R.id.resetBtn);
    productiveBtn = findViewById(R.id.productiveBtn);

    startUp();


}

TimerTask taskUp = new TimerTask() {
    @Override
    public void run() {
        if (run){
            timeMS++;
            seconds = 0;
            minutes = timeMS / 60;
            if (timeMS < 60) {
                seconds = timeMS;
            } else seconds = timeMS - minutes * 60;

            String form = String.format("%02d:%02d", minutes, seconds);

            timerTextView.setText(form);

        }
    }
};

public void startUp(){
    timer.scheduleAtFixedRate(taskUp,1000,1000);// change period back to 1000
}

}

Это весь код, когда я запускаю приложение, оно мгновенно падает.

Если это имеет значение, приложение, которое я пытаюсь создать, представляет собой хронометр сортирует, и когда я нажимаю кнопку, он использует время, которое я получил от хронометра, чтобы запустить таймер, и как только этот таймер достигает 00:00, он продолжает работать как хронометр, и я конвертирую его в таймер и так далее.

Я все еще на очень ранних стадиях, но я пытаюсь создать базовый c хронометр, используя TimerTask, и по какой-то причине при запуске приложения оно вылетает. Любая помощь очень ценится!

Редактировать:

Журнал Cat

2020-04-09 18: 25: 46.428 5761-5870 /? D / PowerKeeper.AppBgIdle: setUidState, uid = 10298 allow = false 2020-04-09 18: 25: 50.569 4911-4911 /? W / AppStateLoggerT: type = 1400 аудит (0.0: 66626): av c: отклонено {read} для name = "osrelease" dev = "pro c" ino = 6324986 scontext = u: r: untrusted_app_27: s0: c165, c256, c512, c768 tcontext = u: object_r: pro c: s0 tclass = файл разрешен = 0

1 Ответ

0 голосов
/ 09 апреля 2020

TimerTask обратные вызовы выполняются из основного потока (пользовательского интерфейса), в то время как вызовы пользовательского интерфейса, такие как setText, должны выполняться в потоке пользовательского интерфейса. Вы должны заключить вызов в setText в вызов timerTextView.post(...), чтобы он был вызван в потоке пользовательского интерфейса.

...