Могу ли я использовать startForeground (id, уведомление) в службе для правильного обновления индикатора выполнения уведомлений?

У меня есть ситуация, когда мне нужно обновить индикатор выполнения уведомлений еще через несколько миллисекунд. Если я использую диспетчер уведомлений для обновления прогресса, то уведомление будет отображаться даже после вызова stopForground(true), что мне не нужно.

Вот пример кода с использованием диспетчера уведомлений для обновления.

private void doStuff() {

    // starting in foreground
    startForeground(123, notification.build());

    final Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            final Handler handler  = new Handler(Looper.getMainLooper());

            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    timer++;
                    if(timer > 10){
                        stopForeground(true);
                        stopSelf();
                        return;
                    }
                    if(!bound){
                        new Handler().postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                notificationManager.notify(123, notification.setProgress(10, timer, false).build());
                            }
                        }, 2000);
                    }

                    handler.postDelayed(this, 1000);

                }
            }, 1000);
        }
    });

    thread.start();
}

в противном случае, если я использую способ startForground(), уведомление не будет отображаться после 2000 миллисекунд, и я получу желаемое поведение, как показано ниже:

  private void doStuff() {

    // starting in foreground
    startForeground(123, notification.build());

    final Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            final Handler handler  = new Handler(Looper.getMainLooper());

            handler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    timer++;
                    if(timer > 10){
                        stopForeground(true);
                        stopSelf();
                        return;
                    }
                    if(!bound){
                        new Handler().postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                startForeground(123, notification.setProgress(10, timer, false).build());
                            }
                        }, 2000);
                    }

                    handler.postDelayed(this, 1000);

                }
            }, 1000);
        }
    });

    thread.start();
}

Мой вопрос в том, будет ли что-то не так, я не знаю, как использовать этот способ, потому что я никогда не видел, чтобы кто-то это делал. Пожалуйста помоги! Спасибо!


person Sam Matt    schedule 01.09.2019    source источник
comment
stackoverflow.com/questions/5528288/   -  person Ghasem Sadeghi    schedule 01.09.2019
comment
@GhasemSadeghi, не могли бы вы объяснить, как предоставленная вами ссылка помогает ответить на мой вопрос?   -  person Sam Matt    schedule 01.09.2019