Что вызывает ошибку RemoteServiceException?

#java #android

Вопрос:

Я получаю много таких ошибок:

 android.app.RemoteServiceException: 
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1772)
at android.os.Handler.dispatchMessage (Handler.java:106)
at android.os.Looper.loop (Looper.java:193)
at android.app.ActivityThread.main (ActivityThread.java:6758)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:497)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:912)
 

Похоже, они происходят только на Android 8.1, 9, 10 и 11. Больше я ничего не вижу, кажется, это происходит на некоторых устройствах. Я везде искал ответ, но, похоже, никто точно не знает, в чем его причина. Я думаю, что это может быть что-то связанное с каналом уведомлений, но, возможно, и нет. Я пробовал startForeground() и onCreate() то, и onStartCommand() другое, и это не имеет никакого значения. Я получаю эти ошибки в течение 5 лет в своем приложении, и я просто не могу воспроизвести их со своей стороны. Это мой сервисный код:

 public static boolean service = false;
public static Context appContext;
public static Handler handler;
public static String notificationText;

@Override
public void onCreate() {
    service = true;
    appContext = getApplicationContext();
    handler = new Handler();

    setNotification();
    if (notification != null) {
        startForeground(1, notification);
    }
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    return START_STICKY;
}

public static void setNotification() {
    try {
        Intent intent = new Intent(appContext, MainActivity.class);
        intent.setAction(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);
        intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pIntent = PendingIntent.getActivity(appContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        Intent intentStop = new Intent(appContext, broadcastReceiver.class);
        PendingIntent pIntentStop = PendingIntent.getBroadcast(appContext, 0, intentStop, PendingIntent.FLAG_UPDATE_CURRENT);
        notification = new NotificationCompat.Builder(appContext, "X")
                .setContentTitle("App Title")
                .setContentText(notificationText)
                .setSmallIcon(R.drawable.ic_notification)
                .setAutoCancel(false)
                .setOngoing(true)
                .setContentIntent(pIntent)
                .addAction(0, "Stop", pIntentStop)
                .build();
        notification.defaults = 0;
        NotificationManager notificationManager = (NotificationManager) appContext.getSystemService(NOTIFICATION_SERVICE);
        if (notificationManager != null) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                NotificationChannel notificationChannel = new NotificationChannel("X", "App Title", NotificationManager.IMPORTANCE_DEFAULT);
                notificationChannel.enableVibration(true);
                notificationChannel.setVibrationPattern(new long[]{0});
                notificationChannel.setSound(null, null);
                notificationManager.createNotificationChannel(notificationChannel);
            }
            notificationManager.notify(1, notification);
        }
    } catch (Exception e) {
        showToast(appContext, e.getMessage());
    }
}

public static class broadcastReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        context.stopService(new Intent(context, MainService.class));
    }
}
 

У кого-нибудь есть хоть какое-то представление о том, что происходит? Спасибо!