В результате операции onStart () отображается пустой экран - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь автоматически запустить простой таймер, когда появляется активность.В настоящее время активность не будет видна до тех пор, пока моя операция не будет завершена.Должен ли я переопределить другой метод?

@Override
protected void onStart() {
    super.onStart();
    for (int i = 0; i <= 100; i++) {
        ((TextView) findViewById(R.id.timer)).setText(String.valueOf(i));
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
            Log.e("timer", e.getMessage());
        }
    }
}

Ответы [ 3 ]

0 голосов
/ 22 октября 2018

Приостановка текущего потока для создания таймера - очень плохая идея. Проверьте класс Timer и посмотрите на метод scheduleAtFixedRate() в этом классе и извлеките ((TextView) findViewById(R.id.timer)) из цикла for.

посмотрите на Как установить таймер в Java?

0 голосов
/ 23 октября 2018

Во время выполнения действия в onStart () вы можете видеть часть своего макета, а не весь свой макет.Может быть, вы можете переопределить метод onWindowFocusChanged (), а затем запустить поток.И почему вы используете 'super.onResume ()' в onStart ()?Я не понимаю:)

0 голосов
/ 22 октября 2018

Вы блокируете основной поток, используйте вместо него Обработчик с Runnable

handler = new Handler();

final Runnable r = new Runnable() {
    public void run() {
        tv.append("Hello World");
        handler.postDelayed(this, 1000);
    }
};

handler.postDelayed(r, 1000);
...