Как я могу избежать android.app.RemoteServiceException - Context.startForegroundService () тогда не вызывал Service.startForeground () - PullRequest
0 голосов
/ 27 сентября 2019

Я по-прежнему вижу много аварий в этой области, несмотря на то, что я на самом деле вызываю startForeground.

Для справки, мой код ниже:

ВОсновная деятельность моего приложения на Create, самое последнее, что я делаю, это:

Intent i = new Intent(c, myGpsService.class);
if (Build.VERSION.SDK_INT >= 26)
    c.startForegroundService(i);
else
    c.startService(i);

А затем в myGpsService:

@Override
public void onCreate() {
    super.onCreate();
    startInForeground();
}

private void startInForeground() {
    if (Build.VERSION.SDK_INT >= 26) {
        NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        NotificationChannel nc = new NotificationChannel(...);
        nc.enableLights(false);
        nc.enableVibration(false);
        if (nm != null)
            nm.createNotificationChannel(nc);
        Notification n = new Notification.Builder(this, nc.getId())
                .setContentText(...)
                .setContentTitle(...))
                .setSmallIcon(...)
                .build();
        this.startForeground(NOTIFICATION_ID, n);
    }
}

Когда я запускаю это на моем Android, он работает нормально, службазапускается и т.д. И для большинства моих пользователей работает нормально.Но я получаю от пользователей много отчетов android.app.RemoteServiceException - несколько десятков в день.

Максимальный разрыв ANR в 5 секунд между startForegroundService и startForeground, и я предполагаю, что это является причиной проблемы (и почему она прерывистая), но я не могу понять, что все может происходить между onCreate в приложениидеятельность и создание в сервисе.Возможно ли, что на некоторых устройствах создание уведомлений происходит медленно?Какие-либо методы / предложения для минимизации времени здесь?Должен ли я вызывать startForegroundService позже, чем onCreate?

...