В моем приложении для Android я записываю множество вещей, таких как GPS, барометрическое давление, датчики Bluetooth.Существует «супер» сервис, который запускается на переднем плане:
Intent intent = new Intent(context, DataCollectorService.class);
ContextCompat.startForegroundService(context, intent);
Сам сервис должен запускать многочисленные дочерние сервисы, такие как GPS-запись, запись с Bluetooth-датчика и тому подобное.И служба создает уведомление:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// . . .
Notification notification = new NotificationCompat.Builder(this, channelId)
// . . .
.build();
startForeground(NOTIFICATION_ID, notification);
mHandler.postDelayed(this::startChildServices, 100);
return START_STICKY;
}
private void startChildServices() {
// . . .
if (gpsEnabled) {
Intent intent = new Intent(this, GpsTrackingService.class);
bindService(intent, mGpsServiceConnection, Context.BIND_AUTO_CREATE);
startService(intent);
}
if (isPressureEnabled) {
Intent intent = new Intent(this, PressureService.class);
bindService(intent, pressureConnection, Context.BIND_AUTO_CREATE);
startService(intent);
}
// . . .
}
Все работает хорошо, но очень маленький процент пользователей сталкивается с такими сбоями:
android.app.RemoteServiceException: Context.startForegroundService ()затем не вызывал Service.startForeground ()
На самом деле, я запускаю «супер» службу на переднем плане, как вы можете видеть.
Нужно ли запускать дочерние службыи на переднем плане?
Очевидно, я не хочу, чтобы в строке состояния пользователей было 3-7 значков уведомлений.