Полагаю, вы хотите знать, какой путь лучше с точки зрения пользователей. Исходя из моего опыта, пользователь ожидает, что приложение продолжит загрузку в фоновом режиме, потому что, если он нажимает «Домой», он обычно либо хочет проверить некоторые другие приложения между ними, либо нажимает на него непреднамеренно, и хочет вернуться в ваше приложение, как только возможный. Если пользователь хочет отменить загрузку, он обычно нажимает кнопку «Назад» или определенную кнопку, чтобы отменить, что-то на экране вашего приложения. Так как пользователь обычно хочет продолжать использовать приложение, более удобным поведением вашего приложения является продолжение загрузки данных и, надеюсь, уже отображать загруженные данные пользователю, когда он вернется в ваше приложение.
С технической точки зрения я бы не стал пользоваться услугой. Я бы просто оставил AsyncTask запущенным. И в худшем случае, когда приложение убивается между ними, приложение автоматически переходит в начальную активность, когда пользователь возвращается к приложению, потому что приложение все равно перезапускается. В случае сбоя асинхронной задачи вы можете проверить, были ли данные успешно загружены и не отображаются ли начальные действия. Вы можете легко реализовать это, сохраняя загруженные данные в переменной, начальное значение которой равно нулю. Если переменная по-прежнему равна нулю после загрузки, AsyncTask не удалось, и вы должны перейти к начальному действию. Я думаю, что это довольно надежная реализация.