我遇到了来自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的评论 也说类似的话。
答案 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);