onCreate()和onStartCommand()中的startForeground()

时间:2019-02-15 07:46:50

标签: android android-9.0-pie foreground-service remoteserviceexception

我遇到了来自Playstore的大量异常报告。 来自Android P的RemoteServiceException。

我正在创建android前台服务,然后调用startForegound(带有通道)。

但是只有99.9%的9.0(android P)用户报告RemoteServiceException。 我检查了是否为该服务创建了通知渠道。 我还检查了在OREO之后是否为OS调用startForegroundService。

每个代码都没问题。

但是我发现我多次调用startForegroundService(),但是Service的onCreate()在创建时仅在第一次调用一次。 因此onCreate()内部的startForeground()仅被调用一次。

但是,如果我将startForeground()放在onStartCommand()中,那么它也会被调用与调用startForegroundService()一样多的次数。 因为只要您调用startService / startForegroundService(即使已经创建Service实例),它也会被调用。

您是否认为这是导致异常的原因。

还有mboy对https://stackoverflow.com/a/51251741/5343的评论 也说类似的话。

2 个答案:

答案 0 :(得分:0)

您可以在调用startForeground()中的onStartCommand()之前尝试此代码块

try {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, NotifyManagerUtils.getNotificationDefaultChannelId());
        builder.setWhen(System.currentTimeMillis())
                .setSmallIcon(R.drawable.app_icon);
        startForeground(YOUR_ID, builder.build());
    }
} catch (Exception e) {
    if (DEBUG) {
        Log.e(TAG, e.getMessage());
    }
}

如果您多次onCreate(),则在服务startService()/startForegroundService()中应该调用一次的更多信息,但是onStartCommand()的运行时间与调用次数相同,因此我认为您应该添加一个检查对于我们的服务,如果该服务仍然有效,那么不要致电startForeground()也许可以解决此问题。

同样的问题,请检查this

答案 1 :(得分:0)

这里有同样的问题。 就我而言,当我更改id时,似乎可以解决此问题。

之前

startForeground(1, notification);

之后

startForeground(100001, notification);