在我的Android应用中,我记录了很多东西,例如GPS,气压,蓝牙传感器。在前台启动了一项“超级”服务:
Intent intent = new Intent(context, DataCollectorService.class);
ContextCompat.startForegroundService(context, intent);
服务本身必须启动许多子服务,例如GPS记录,蓝牙传感器记录等。服务会创建一个通知:
@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个通知图标。