Просто пытаюсь прояснить мое понимание того, как IntentService
управляет IntentService
после достижения завершающих состояний. Под прекращением я подразумеваю, когда текущая активность уничтожена или процесс приложения завершен, согласно следующей документации: https://developer.android.com/guide/components/activities/activity-lifecycle.
Учитывая комментарий
Кроме того, IntentService не подвержен влиянию большинства событий жизненного цикла пользовательского интерфейса, поэтому он продолжает работать при обстоятельствах, приводящих к отключению AsyncTask.
по адресу https://developer.android.com/training/run-background-service/create-service;
Я чувствую, как будто:
1) На запущенный IntentService
не влияет жизненный цикл активности. Это правильно?
2) Если (1) верно, будет ли он продолжать работать бесконечно даже после достижения состояния завершения, вплоть до некоторой точки, когда он либо сам остановится, либо ОС решит остановить его?
В моей конкретной ситуации я использую IntentService
во время запуска приложения, чтобы запрашивать API, захватывать содержимое, а затем добавлять новую (целевую) Page
в стек навигации Xamarin.Forms (это будет эквивалентно запуску нового действия). Это приводит меня к моему следующему вопросу...
3) Что произойдет, если приложение уже находится в завершенном состоянии, когда придет время, когда IntentService
создаст новое действие? Конечно, активность нельзя добавить в стек навигации, так как он больше не существует после завершения работы приложения?
Да, запущенный IntentService
не зависит от жизненного цикла действия. На самом деле, все Сервисы за пределами связанных Сервисов не затрагиваются жизненным циклом деятельности.
Служба IntentService
будет продолжаться до тех пор, пока не завершит свою работу, приложение не будет уничтожено или система не решит уничтожить Service
из-за изменений в правилах фоновой службы Android 8.0.
Ваше использование завершенного состояния слишком широкое... Если приложение уже завершено, то ничего не произойдет, потому что IntentService
был бы уже завершен. Если ней Activity
, которая запустила IntentService
, которая была прекращена, то ничего не происходит, так как по умолчанию, IntentService
не имеет ничего общего с деятельностью, даже если это тот, который начал.
Последний вопрос зависит от того, как вы решите сообщить результат IntentService
в Activity
.
Если вы используете BroadcastReceiver
, то ничего не произойдет, потому что IntentService
запустит трансляцию без каких-либо проблем, но Activity
не сможет получить результаты, так как она была прервана.
Но если вы просто создать новую Activity
, то вы можете просто использовать startActivity()
с данными результатов, добавленных к Намерению. Хотя, я сомневаюсь, что пользователь будет рад видеть Activity
внезапно открыть на экране, когда они больше не в вашем приложении. Начиная новую Activity
не имеешь ничего общего с предыдущей Activity
, так как любой экземпляр Context
может начать Activity
.
Честно говоря, исходя из вашего вопроса, звучит так, как будто вы очень заинтересованы в IntentService
и его связи с Activity
которая его запустила. Если это так, то вам действительно не следует использовать IntentService
, поскольку это не совсем его цель. Это не значит иметь связь с Activity
. Это просто означало сделать работу и закончить.
Вместо этого лучше использовать связанный Service
, поскольку он имеет прямое соединение с Activity
которая его запустила.
Activity
, которая началась мояIntentService
, скорееActivity
, что мойIntentService
начнется , как только это будет сделано все его обработку. Как вы говорите,IntentService
может фактически вызвать внезапное появлениеActivity
; но фактический код , чтоIntentService
вызывает , чтобы начать эту новуюActivity
существовал в предыдущейActivity
, которая в настоящее время прекращена, так как это вообще возможно?IntentService
вызывает , чтобы начать эту новуюActivity
существовала в предыдущейActivity
, которая в настоящее время прекращено». Вы говорите оstartActivity()
?startActivity()
не является методом, который принадлежитActivity
, а принадлежит родительскому классуContext
.Service
также является дочерней по отношению кContext
, так что этоIntentService
также является дочерней по отношению кContext
. Это даетIntentService
возможность напрямую использоватьstartActivity()
.