Что ж, решение простое: создайте BroadcastReceiver для загрузки при загрузке и установите флажок где-то вроде ForceClosed в значение TRUE, если приложение завершено без ошибок, а затем установите флаг в значение FALSE.
При получении загрузки Boot Broadcast, проверьте, является ли ForceClosed ИСТИНА, если да, делайте что хотите, а затем установите его обратно в ЛОЖЬ.