还必须在前台启动Android子服务吗?

时间:2019-05-01 10:07:04

标签: android android-service android-permissions

在我的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个通知图标。

0 个答案:

没有答案