Я по-прежнему вижу много аварий в этой области, несмотря на то, что я на самом деле вызываю 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?