Фоновый поток, как периодически обновлять интерфейс - PullRequest
0 голосов
/ 10 сентября 2018

Как правильно запустить фоновый поток или запустить таймер для обновления пользовательского интерфейса каждую 1 секунду? Я имею в виду, когда активность приостановлена, поток должен быть приостановлен, когда работа возобновлена, поток или таймер должны быть возобновлены, и каждые вторые данные должны обновляться в пользовательском интерфейсе.

1 Ответ

0 голосов
/ 10 сентября 2018

Вы можете использовать класс HandlerThread для создания потока, как показано ниже:

HandlerThread handlerThread = new HandlerThread("MyHandler");
handlerThread.start();
Looper looper = handlerThread.getLooper();
Handler handler = new Handler(looper);

После этого запустите ваш runnable следующим образом:

  handler.postDelayed(() -> {
            // runnable code here

            // call again thread after 1000 millis
            handler.postDelayed(this, 1000);
        }, 1000);

Класс HandlerThread, так как каждый класс вJava, наследуется от Object класса, который имеет wait() метод.Если вы проверяете документацию, он говорит: «Заставляет текущий поток ждать, пока другой поток не вызовет метод notify() или метод notifyAll() для этого объекта».Вы должны приостановить поток, вызвав handlerThread.wait() в соответствии с жизненным циклом вашей деятельности, например, внутри метода onPause().Не забывайте вызывать notify() в том же экземпляре потока, когда ваша деятельность возобновляется, как правило, внутри метода onResume().Позвоните handler.removeCallbacks, когда вы закончите:)

...