Установка хронометра на исчезнувшую видимость останавливает его работу - PullRequest
0 голосов
/ 06 июня 2018

У меня есть этот код, который вызывает функцию каждую секунду.Функция выполняет множество задач, связанных с выполнением теста скорости.

Как вы можете видеть, есть линия, в которой видимость установлена ​​на "пропал".В Android 8.1.0 это вызывает сбой Chronometer.Функция onTimer() никогда не вызывается.В 7.1.1 этот код работает, и тест выполняется как ожидалось.

Мне нужно сохранить механизм таймера, но я не хочу, чтобы таймер был в поле зрения.

Какие у меня варианты?

   public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            setContentView(R.layout.test);

            // 1 second timer
            Timer = (Chronometer)findViewById(R.id.Chronometer01);
            Timer.setVisibility(Chronometer.GONE);

            Timer.setOnChronometerTickListener(new OnChronometerTickListener()
            {
                @Override
                public void onChronometerTick(Chronometer arg0) 
                {
                    OnTimer();
                };
            });
            Timer.start();
        }

1 Ответ

0 голосов
/ 06 июня 2018

A Chronometer обычно не то, что вы используете для выполнения фоновых задач (делая это, вы полагаетесь на что-то на уровне представления для выполнения бизнес-логики!).Существует множество различных способов выполнения фоновых задач каждые n секунд без использования объектов пользовательского интерфейса, довольно приемлемый способ - использование Handler, который может многократно запускать задачу, содержащуюся в ней.за Runnable каждые n миллисекунд, например:

Handler handler = new Handler();

private Runnable runnable = new Runnable () {
    @Override
    public void run() {
        OnTimer(); // Run your code
        handler.postDelayed(this, 1000); // re-run this Runnable object in 1 second
   }  
}

handler.post(runnable); // run the Runnable object now
...