У меня есть ситуация, когда мне нужно обновить индикатор выполнения уведомлений еще через несколько миллисекунд. Если я использую диспетчер уведомлений для обновления прогресса, то уведомление будет отображаться даже после вызова 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();
}
Мой вопрос в том, будет ли что-то не так, я не знаю, как использовать этот способ, потому что я никогда не видел, чтобы кто-то это делал. Пожалуйста помоги! Спасибо!