Android. Два способа записать результат Timer в пользовательский поток (UI Thread).

Теги: Java, Android, Timer, Threads, Примеры

Timer в Android - это класс, который позволяет запланировать выполнение задачи на определенное время и, при необходимости, обеспечить циклическое повторение запуска задачи через определенные промежутки времени. Описание задачи дается в классе TimerTask.

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

Способ первый

https://github.com/ziginsider/TimerDemo

    class MyTimerTask extends TimerTask {
        @Override
        public void run() {
            Calendar calendar = Calendar.getInstance();
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss a");
            final String strDate = simpleDateFormat.format(calendar.getTime());

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    txtCounter.setText(strDate);
                }
            });
        }
    }

Способ второй

https://github.com/ziginsider/CodeLabsAndroidLifeCycle

    public LiveDataTimerViewModel() {
        mInitalTime = SystemClock.elapsedRealtime();
        Timer timer = new Timer();

        //Update the elapsed time every second
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                final long newValue = (SystemClock.elapsedRealtime() - mInitalTime) / 1000;

                //use tne Main looper
                new Handler(Looper.getMainLooper()).post(new Runnable() {
                    @Override
                    public void run() {
                        mElapsedTime.setValue(newValue);
                    }
                });
            }
        }, ONE_SECOND, ONE_SECOND);
    }
13 10 2017

Теги заметки: