создать службу переднего плана и использовать таймер countDown. затем каждую 1 секунду отправлять трансляцию, чтобы изменить пользовательский интерфейс. если вы хотите, чтобы ваше приложение работало в фоновом режиме на android 8 и выше, вы должны отправить уведомление с сервисом, чтобы показать пользователю, ваше приложение выполняет задачу.
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
int milliseconds = 100* 1000;
new CountDownTimer(milliseconds, 1000) {
@Override
public void onTick(long millisUntilFinished) {
Intent intent = new Intent("timer_tracking");
intent.putExtra("timer", millisUntilFinished);
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
}
@Override
public void onFinish() {
stopSelf();
}
}.start();
return START_STICKY;
}
и в активности / фрагменте после регистрации broadcast_receiver используйте этот код.
public BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@SuppressLint("DefaultLocale")
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(MainActivity.this, "broad", Toast.LENGTH_LONG).show();
long millisUntilFinished = intent.getLongExtra("timer", 0);
String counter = String.format("%02d:%02d:%02d",
TimeUnit.MILLISECONDS.toHours(millisUntilFinished),
TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished),
TimeUnit.MILLISECONDS.toSeconds(millisUntilFinished) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millisUntilFinished)));
textView.setText(counter);
}
};