Это плохая практика, чтобы зацикливать поток каждые 1 с, когда активность открыта? - PullRequest
0 голосов
/ 06 июля 2019

У меня есть приложение, которое работает с датами и временем, а также индикатор выполнения, который показывает процент времени, прошедшего с одной даты до другой.Таким образом, если date1 - 2019-07-05 17:00, а date2 - 2019-07-05 19:00, а текущее время - 2019-07-05 18:00, процент составляет 50%, потому что 50% времени отдаты от даты1 до даты2 остаются.

И в начале работы я вычисляю процент времени и устанавливаю это значение с помощью setProgress () в индикатор выполнения.Проблем пока нет и все работает.Мой вопрос сейчас заключается в том, могу ли я создать поток, который спит в течение 1 с, а затем рассчитать новый процент, потому что текущее время изменилось, и установить значение для индикатора выполнения.Это будет повторяться каждую 1 секунду, пока активность не будет завершена.Это плохой метод?Я думал о производительности, когда запускаю код каждую 1 секунду.Это хорошая практика?Могу ли я сделать это?

Ответы [ 2 ]

1 голос
/ 06 июля 2019

Попробуйте использовать Timer или Handler вместо

    final Handler handler = new Handler();

final Runnable runnable = new Runnable() {
    @Override
    public void run() {
        updateProgress();
        handler.postDelayed(this, 1000L);
    }
};

void doWork() {
    // do one of these, either handler or timer
    handler.post(runnable);

    new Timer().schedule(new TimerTask() {
        @Override
        public void run() {
            updateProgress();
        }
    }, 0L, 1000L);
}
0 голосов
/ 06 июля 2019

Если это важная часть вашего приложения, то это не так уж плохо. Вы можете даже зациклить каждую 1/60 секунды, чтобы ваш бар обновлялся со скоростью 60 кадров в секунду, и с ним не было бы никаких проблем.

Но я бы предложил использовать Timer, потому что вы повторяете только каждую секунду, и его также легче остановить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...