Процесс плохой ошибки, похоже, не очень хорошо задокументирован, и мне удалось найти только обходные пути. Вместо этого меня интересует причина этой ошибки и то, как ее предотвратить, а не то, как справиться с ней вручную путем перезагрузки, перезапуска приложения и т. д.
Мое конкретное приложение использует AlarmManager для запуска IntentService, который работает в течение ~ 10 секунд каждые ~ 30 секунд. Это вызывается при создании приложения:
Intent serviceIntent = new Intent(appContext, MyService.class);
serviceIntent.putExtra("service_extra", extra);
launchService = PendingIntent.getService(
appContext,
LAUNCH_SERVICE_REQUEST_CODE,
scanIntent,
PendingIntent.FLAG_UPDATE_CURRENT
);
alarmManager.setInexactRepeating(
AlarmManager.RTC,
System.currentTimeMillis() + interval,
interval,
launchService
);
Это работает, как и ожидалось, большую часть времени. Однако очень редко служба не запускается в течение неопределенного периода времени, иногда в течение нескольких часов. Следующая ошибка появляется каждые ~ 30 секунд, поэтому я знаю, что мои сигналы тревоги пытаются запустить IntentService по расписанию, но попытка завершается неудачей с ошибкой процесса.
Unable to launch app com.example.android/10024 for service Intent { cmp=com.example.android/.MyService (has extras) }: process is bad
Это лечится простым повторным открытием приложения. Но мне нужно знать, как это предотвратить! Цель этой службы — работать в фоновом режиме, когда действия остановлены или уничтожены, поэтому она должна предотвращать эту ошибку без какого-либо взаимодействия с пользователем или обходного пути.